socket TCP中的粘包和分包处理–数据解析
1:这里要讲的是socket中的粘包和分包处理,先看看粘合和分包是如何形成的
1.1粘包和分包问题:粘包和分包是利用socket在TCP协议下的内部优化机制
粘包:
多条消息粘包,导致这种情况是发送内容比较频繁,内容较小,进行粘合,节约资源
分包:
对发送的数据比较大的时候,进行分开发送,类似于分段发送,进行拆分的发送
2:遇到这种情况,我们该如何处理呢?我给出了下面的方法,在socket传输消息的过程中,我采用了一个类,message.cs类处理消息,看如下
3:服务端代码:server
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace TCP //服务端
{
class Program
{
static void Main(string[] args)
{
StartServerAsync();
Console.ReadKey();
}
//异步处理函数
static void StartServerAsync()
{
// 创建套接字 ipv4 tcp传输流 协议类型:tcp
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定IP 本地IP 192.168.1.100
IPAddress ipAddress = IPAddress.Parse("192.168.1.100");
//申请端口
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8888);
//并绑定ip和端口
serverSocket.Bind(ipEndPoint);
//开启监听端口号 最大连接量为10
serverSocket.Listen(10);
//接受客户端链接--接受一个客户端
// Socket clientSocket = serverSocket.Accept();
//接受多个客户端--开启异步接受
serverSocket.BeginAccept(AcceptCallBack,serverSocket);
}
//消息处理类
static Message msg = new Message();
//接受多个连接的回调函数
static void AcceptCallBack(IAsyncResult ar)
{
Socket serverSocket = ar.AsyncState as Socket