Ce que je suis en train de faire est de reçu un grand nombre d'octets (sur les données 5MB) envoyées par le côté clientflux réseau collé sur stream.Read (octet [] octet, int offset, int size)
Ci-dessous le code où les données (octet []) est reçu
byte[] receivedBytesRaw = new byte[4000];
//first, initialize network stream
NetworkStream stream = client.GetStream();
//The bytesNeeded is the size of bytes which is a protocol sent by the client side indicating the size of byte which will be sent
int bytesNeeded = 4000;
int bytesReceived = 0;
do
{
int bytesRead = stream.Read(receivedBytesRaw, bytesReceived, bytesNeeded - bytesReceived);
networkValidation.addBytesToList(receivedBytesRaw, ref receivedBytes);
bytesReceived += bytesRead;
} while (bytesReceived < bytesNeeded);
Mais maintenant, je suis coincé sur un problème:
Everytime lorsque les données arrivent, les boucles do en boucle pour la première fois, et la valeur de retour (i) est 26, puis il boucle à nouveau, cette fois, quand il va à " i = stream.Read(receivedBytesRaw, 0, receivedBytesRaw.Length);"
, le programme semble w J'aide le côté client à envoyer des données et n'a pas de réponse, aussi, quand je vérifie "receivedBytesRaw", les données étaient incomplètes, seulement les 13 premiers octets ont été reçus, l'espace restant dans le tableau d'octets reste null, et le stream.DataAvailable est faux
Pourquoi le côté serveur a-t-il reçu des données incomplètes? Note: lorsque je tente d'envoyer de petites données (une chaîne), il est ok
============================= ========================================
Edité
ci-dessous est le code côté client qui envoie des données:
private int sendData(byte[] dataSend, string IP, int portNumber)
{
TcpClient clientSide = new TcpClient();
int result = -1;
try
{
clientSide.Connect(IP, portNumber);
}
catch (Exception ex)
{
return 2;
}
NetworkStream netStream = clientSide.GetStream();
if (netStream.CanWrite)
{
byte[] replyMsg = new byte[1024];
netStream.Write(dataSend, 0, dataSend.Length);
netStream.Flush();
result = 0;
}
else
{
result = 1;
}
return result;
}
cand vous publiez le code du côté client?ils doivent être synchronisés sur la quantité de données envoyées –
Veuillez voir mon code édité, j'ai testé le côté client et les données (tableau d'octets) envoyées sont correctes – User2012384
Vous ne savez tout simplement pas quand arrêter en train de lire. TCP est un flux, pas un format de paquet. L'expéditeur n'indique pas le nombre d'octets qu'il va envoyer et ne ferme pas le socket. Donc, le récepteur sera inévitablement coincé dans la boucle. Corrigez cela en écrivant d'abord dataSend.Length. Le récepteur peut maintenant lire cela en premier et compter les octets. –