TCP是基于流的协议。为了将该流转换为我的消息,我将每条消息的大小与消息本身一起发送。在服务器端,我首先读取具有大小的消息的前两个字节。然后我创建一个字节数组,其大小等于刚才读取的大小。然后我读入该数组中的字节。但由于某些原因,正在读取的字节数多于指定的字节数。我怎样才能读取与我指定的完全相同的字节数?套接字编程:如何从缓冲区读取指定数量的字节?
这里是我的代码:
while (true)
{
data = null;
length = null;
size = new byte[2];
handler.Receive(size);
length += Encoding.ASCII.GetString(size, 0, 2);
System.Console.WriteLine("Size: " + Int32.Parse(length));
bufferSize = Int32.Parse(length) + 2;
bytes = new byte[bufferSize];
handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bufferSize);
System.Console.WriteLine("Data: " + data);
}
这是我的服务器在Windows PC上运行,用C#编写。我的客户端运行在用Java编写的android手机上。
一)你使用为什么''长度+ = ...' '而不是''长度= ...''? b)为什么bufferSize = Int32.Parse(length)+ 2;''中的''+ 2''? c)你期望的长度是2个ASCII字符。客户端是否以2字节的形式发送它们?或者可能是一个4字节的整数? – f1sh
a)我猜'length + = ...'和'length = ...'是一样的,因为每次都将length设置为null。 b)处理客户端发送的换行符。 –
'length'必须是'int'而不是'string'。也许你来自'python'或'javascript'世界。 – i486