下面的代码是使用套接字接收数据。
这里的问题是字节大小应该按照预期的量初始化,否则数据将不会有预期的结果。
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());
}
那么在接收数据时如何处理未知大小的字节?
最佳答案
如果您可以控制发件人。您可以在前 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)
关于c# - Socket 接收数据时处理未知字节大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765305/