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 respBytes = new 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());
 }

}

posted @ 2025-03-09 12:21  .Net菜鸟站  阅读(31)  评论(0)    收藏  举报