以下代码使用Socket接收数据。
这里的问题是字节大小应该初始化为预期的数量,否则数据将没有预期的结果。
try
{
byte[] byt = new byte[256]; // Byte size should be intialize as expected
clientSocket.ReceiveTimeout = 10000;
clientSocket.Receive(byt);
String msg = Encoding.UTF8.GetString(byt);
Console.WriteLine("Message" + msg);
}catch (SocketException e){
if (e.SocketErrorCode == SocketError.TimedOut){
Console.WriteLine("SocketException: Timeout");
}else{
Console.WriteLine("SocketException: " + e.ToString());
}
}catch (Exception e){
Console.WriteLine("Exception: " + e.ToString());
}
那么在接收数据时如何处理未知大小的字节?
答案 0 :(得分:0)
如果您可以控制发件人。您可以在第4个字节中传递包的大小并将其转换为int
接收时,您可以使用
byte[] buffer = new byte[4];
ClientSocket.Receive(buffer);
int length = BitConverter.ToInt32(buffer, 0);
buffer = new byte[length];
ClientSocket.Receive(buffer);
发送时将大小添加到包的开头
BitConverter.GetBytes(buffer.Length)