首页 新闻 搜索 专区 学院

一个C#服务器,怎么设置每次接收客户端的信息都是接收到指定的结束符??

0
悬赏园豆:20 [已解决问题] 解决于 2020-03-10 17:15

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数据分开接收。可以实现吗?

😀明笔记的主页 😀明笔记 | 初学一级 | 园豆:29
提问于:2020-03-10 11:52
< >
分享
最佳答案
1

TCP会粘包是理所当然的,你要自己实现分包逻辑,简单来说就是自己查找结束符。

收获园豆:15
拓拓 | 小虾三级 |园豆:590 | 2020-03-10 15:19

TCP本身是没有结束符这样的接收功能的吗?

😀明笔记 | 园豆:29 (初学一级) | 2020-03-10 15:20

@😀明笔记: 没有,TCP协议是面向字节流的运输层协议,他只保证把字节按顺序送达,不关心发送的具体内容。拆包这种操作是应用层协议的事

拓拓 | 园豆:590 (小虾三级) | 2020-03-10 16:44
其他回答(1)
0

TCP没有自身解析结束符的方法,只能通过接收来的数据,自己自行解析数据。
我的方法是:
通过字符串的IndexOf()方法和Substring()方法解析数据,并分段放在list<string>列表中,进入lock之前,逐个提取list中的数据即可实现。

😀明笔记 | 园豆:29 (初学一级) | 2020-03-10 17:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册