Socket TCP解决粘包问题最常用的解决方法
///
/// TCP解决粘包问题最常用的解决方法
///
public void ServerClint()
{
//服务端
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8099));
server.Listen();
Task.Run(() =>
{
Socket c = server.Accept();
List
//解决粘包问题
while (true)
{
byte[] data = new byte[2];
//先接收两个数据字节
c.Receive(data);
//再接收后面是数据字节
short len = BitConverter.ToInt16(new byte[] { data[0], data[1] }, 0);
data = new byte[len];
c.Receive(data);
Console.WriteLine(Encoding.UTF8.GetString(data));
}
});
//客户端
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8099));
for (int i = 0; i < 10; i++)
{
string msg = "Hello";
byte[] data = Encoding.UTF8.GetBytes(msg);
//把数据再封装到List<byte> bytes = new List<byte>();中
List<byte> bytes = new List<byte>();
short len = (short)data.Length;
//bytes第一个数据两个字节
bytes.AddRange(BitConverter.GetBytes(len));
// 第二个是数据字节
bytes.AddRange(data);
//推送
client.Send(bytes.ToArray());
}
}

浙公网安备 33010602011771号