我在使用套接字时遇到了问题。我有一个客户端到服务器应该发送截图。问题是服务器没有从客户端发送的数组中接收所有字节。通常缺少255个字节(多次检查)。因此,在服务器端,我无法执行从字节数组到图像的转换。
客户端将数据发送到服务器:
byte[] bytesforSend = ConvertBitmapToByteArray(GetScreenImage());
client.Send(bytesforSend, bytesforSend.Length, 0);
服务器从客户端收到数据:
int lenght = cl.socket.Receive(bytes);
也许所有这些都很容易解决,但我第一次使用套接字并且我不明白为什么会这样。
答案 0 :(得分:0)
让我在这里粘贴你在评论中写的代码:
var myObject = {first: true, second: false, third: true};
var myKeys = Object.keys(myObject); //['first', 'second','third']
这里最可能出现的问题(我在与相机通信的商业图书馆中看到类似的问题)是你假设所有数据会同时到达目的地,但这不是真的,这取决于关于网络条件或客户端实际发送数据的方式。
假设客户端在四个512字节的TCP段中发送一个2048字节的数据块。前三个立即到达,但由于某些网络问题,最后一个数据包丢失,需要重新传输。与此同时,您已经执行了List<byte[]> recievingBytes = new List<byte[]>();
List<int> lenghts = new List<int>();
int lenght; do
{
lenght = cl.socket.Receive(bytes);
recievingBytes.Add(bytes);
lenghts.Add(lenght);
} while (lenght != 0);
检查并结束了循环。 在之后,最后一个512字节的片段到了,但你错过了它。
您需要做的是将while (lenght != 0)
替换为while(lenght != 0)
之类的内容,这当然要假设您事先知道将收到多少数据,或者您可以以某种方式检测到数据。