110,570
社区成员
发帖
与我相关
我的任务
分享
client.Send(data);
do
{
var x = client.Receive();
buffer.Add(x);
}while(判断还没有收到一个完整的消息结束标记);
解析buffer中的数据;
client.Close();
这类思路来写代码。
tcp 协议中,接收数据是粘包/分包的,这是最起码的知识。并且只有客户端短链接,才可以不管不顾地认为仅仅是“一问一答然后就关闭连接”的模式。
对于长连接,比如说客户端以顺序1、2、3、4、5的次序(顺序或者并发)执行了多个 Send 操作,服务器端并发进行命令处理,完全可能以 3、2、1、5、4的顺序返回结果。然后客户端应该根据收到消息的顺序,来触发必要的事件/委托,通知之前 Send 消息的任务开始处理委托回调。
说多了你也不一定理解。只要记住几点基本知识,tcp 通讯每一条消息通讯必定是有粘包/分包的,长连接处理必定是并发多线程随即顺序的,通讯连接建立之后必定会随时接受到对方推送来的任意消息。基于这些现实概念来学习,才真正能判断什么是真的知识。