byte[] arrMsg = new byte[1024 * 1024];
int length = client.Receive(arrMsg);
if (length > 0)
{
string recMsg = Encoding.Default.GetString(arrMsg, 0, length);
IPEndPoint endpoint = client.RemoteEndPoint as IPEndPoint;
lock (PLClock)
{
//处理数据
}
我想设置每次执行lock之前。都是进入数据recMsg = "....\r\n",以结束符"\r\n"为止。。可以做到吗?
目前是会连续发送3次数据。每当在执行第一次数据时,lock解锁后,2.3数据会一起接收,现在想做到2.3数据分开接收。可以实现吗?
TCP会粘包是理所当然的,你要自己实现分包逻辑,简单来说就是自己查找结束符。
TCP本身是没有结束符这样的接收功能的吗?
@😀明笔记: 没有,TCP协议是面向字节流的运输层协议,他只保证把字节按顺序送达,不关心发送的具体内容。拆包这种操作是应用层协议的事
TCP没有自身解析结束符的方法,只能通过接收来的数据,自己自行解析数据。
我的方法是:
通过字符串的IndexOf()方法和Substring()方法解析数据,并分段放在list<string>列表中,进入lock之前,逐个提取list中的数据即可实现。