C# Socket 通信三大问题详解
C# Socket 通信三大问题是什么呢?C# Socket 通信三大问题的具体内容是什么呢?各
自的特点是什么呢?那么本文就向你详细介绍 C# Socket 通信三大问题。
C# Socket 通信三大问题是什么呢?让我们开始讲述:
C# Socket 通信三大问题之数据包界限符问题。
根据原项目中交通部标准,在连续观测站中数据包中,使用﹤﹥两个字符表示有效数
据包开始和结束。实际项目有各自的具体技术规范
C# Socket 通信三大问题之数据包不连续问题。
在 TCP/IP 等通信中,由于时延等原因,一个数据包被 Socket 做两次或多次接收,此
时在接收第一个包后,必须保存到 TSession 的 DatagramBuer 中,在以后一并处理
C# Socket 通信三大问题包并发与重叠问题。
由于客户端发送过快或设备故障等原因,一次接收到一个半、两个或多个包文。此时,
也需要处理、一个半、两个或多个包
先补充异步 BeginReceive()回调函数 EndReceiveData()中的数据包分合函数
ResolveBuer()。
下面是 C# Socket 通信三大问题的实例演示:
1. /// summary ﹤ ﹥
2. ///1)报文界限字符为﹤﹥,其它为合法字符,
3. ///2)按报文头、界限标志抽取报文,可能合并包文 œ
4. ///3)如果一次收完数据,此时œDatagramBuffer为空 œ
5. ///4)否则转存到包文缓冲区œsession.DatagramBuffer
6. /// /summary ﹤ ﹥
7. privatevoidResolveBuffer(TSessionsession,intreceivedSize)
8. {
9. //上次留下的报文缓冲区非空(注意:必然含有开始字符œ﹤,空时不含œ﹤) œ
10. boolhasBeginChar=(session.DatagramBufferLength﹥0);
11.
12. intpackPos=0;//ReceiveBuffer缓冲区中包的开始位置 œ
13. intpackLen=0;//已经解析的接收缓冲区大小 œ
14.
15. bytedataByte=0;//缓冲区字节 œ
16. intsubIndex=0;//缓冲区下标 œ
17.
18. while(subIndex﹤receivedSize)
19. {
20. //接收缓冲区数据,要与报文缓冲区œsession.DatagramBuffer同时考虑 œ
评论1