我正在使用socket C#。我使用套接字实现了客户端服务器应用程序,但问题是客户端没有收到服务器发送的所有数据。
这是客户端应用程序代码。我应该怎么做才能收到服务器发送的所有数据?
strRecieved = "";
Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001);
soc.Connect(endPoint);
byte[] msgBuffer = Encoding.Default.GetBytes(msgToberecieved);
soc.Send(msgBuffer, 0, msgBuffer.Length, 0);
byte[] buffer = new byte[2000];
int rec = soc.Receive(buffer);
strRecieved = String.Format(Encoding.Default.GetString(buffer));
答案 0 :(得分:0)
TCP是流协议,而不是数据报协议。这意味着可以通过多个接收呼叫分割数据。在一次接收呼叫中也可以接收多个分组。
因此,您需要一个应该定义数据长度的数据包帧。
例如:
创建一个带有signatue(uint)和datalength(uint)的头文件(总共8个字节)。跟进数据。 (x字节)
要解析数据,您可以使用BitConverter或BinaryReader
另一种可能性是读取数据,直到你有一个停止'标志。例如EOL
或EOF
等