J'ai un programme client-serveur.Données non reçues correctement par TcpClient
J'envoie des données comme ceci:
private void Sender(string s,TcpClient sock)
{
try
{
byte[] buffer = Encoding.UTF8.GetBytes(s);
sock.Client.Send(buffer);
}catch{}
}
et du côté client recevant comme ceci:
byte[] buffer = new byte[PacketSize];
int size = client.Client.Receive(buffer);
String request = Encoding.UTF8.GetString(buffer, 0, size);
Le problème est que les données ne sont pas entièrement reçu toujours, il est parfois seulement une partie de ce que j'ai envoyé. PacketSize
est 10240 ce qui est plus que les octets que j'envoie. J'ai également défini SendBufferSize et ReceiveBufferSize des deux côtés.
Le pire, c'est que parfois les données sont entièrement reçues!
Quel pourrait être le problème?
+1. Et n'oubliez pas d'utiliser un timeout sur le client/flux tcp, sinon votre application va se bloquer si l'application qui envoie les données se comporte mal/a des problèmes de réseau. – stefan
@stefan: Il serait encore mieux d'utiliser les méthodes 'Async' à la place. Mais commençons par les notions de base :) – Jon
@Jon il peut être préférable d'utiliser Async oui, mais cela dépend vraiment de l'application. – stefan