c#socket读取数据问题

henujava 2010-10-04 06:22:34
我用c#写了一个socket小程序,用来和邮件服务器通信,socket类型为stream类型,由于网络及服务器响应事件的延迟,我从缓冲区读出的数据经常重复,有时还不完整,我想问一下大家,当从缓冲区读出数据后,缓冲区会清空吗?我如何知道当前缓冲区的数据已被服务器发出的数据更新了呢?如何才能读到服务器发出的最新的信息呢?
...全文
273 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
looklzg1108 2010-10-08
  • 打赏
  • 举报
回复
stream类型本身就不合理,个人感觉。最后是结构体,转化为二进制,然后,解析结构体,并且返回接收信息,采用绝对的握手方式,这样,传输的时候,可以保证数据的完整性。
tyg111 2010-10-08
  • 打赏
  • 举报
回复
filestream.flush()清空缓存
3000sunqin 2010-10-04
  • 打赏
  • 举报
回复
一般最好使用业界比较流行的通信协议来为你的数据做边界处理。
例如,Modbus,CAN协议等,
当然也可以自己定制协议格式。
wuyq11 2010-10-04
  • 打赏
  • 举报
回复
发送端先将数据放到缓冲栈里,然后再由缓冲栈向远程主机发送数据。接收端以相反的过程接收数据
大多数时候发送端多次发送的小数据包会被连在一起被接收端同时接收到,多个小包被组成一个大包被接收。有时候一个大数据包又会被拆成多个小数据包发送,就存在
tcp粘包问题,要对消息进行边界处理。
Socket.SendBufferSize缓存区大小设置
程序及时的将缓冲区里的数据取走,接收端又将接收到的数据填充到缓冲区中

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧