Indy的容错性,各英雄来指点下

elite01 2006-03-07 04:54:53
我有困惑
我用Tidtcpclient.WriteBuffer,发记录型的数据,
用ReadBuffer,收数据
问题是,我如在一长期的循环中这样做,万一对方多发一字节
我只是收,
那么我以后的数据不都乱了吗,这样不是很脆弱吗,
这是如何解决的
...全文
172 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ace0206 2006-03-13
  • 打赏
  • 举报
回复
notice
halfdream 2006-03-13
  • 打赏
  • 举报
回复
当然不行的.
elite01 2006-03-13
  • 打赏
  • 举报
回复
halfdream(哈欠):
感谢指教,
多个Tidtcpclient实例可否共用一个端口而互不干扰地工作吗?
elite01 2006-03-13
  • 打赏
  • 举报
回复
哈哈,感谢指点
halfdream 2006-03-12
  • 打赏
  • 举报
回复
TCP层的责任是保证数据流的可靠性...

如果多收到一字节,肯定也是对方应用程序发的.对于这种严重代码编写错误,还有什么必要维持链接呢?
halfdream 2006-03-12
  • 打赏
  • 举报
回复
在一个长连接的SOCKET TCP通讯中,如果出现对方未按约定而多发一字节,最明智的方法是你自己抛出异常,并主动断开链接.
elite01 2006-03-10
  • 打赏
  • 举报
回复
fffddd(杀我者死):
readbuffer(ProtocolSeparatorStr,SizeOf(ProtocolSeparatorStr))
它只读了SizeOf(ProtocolSeparatorStr) 个字节,如果多发了
我在下个WriteBuffer后会读到上次留下的字节和本次需要的回复的
字节的部分.
fffddd 2006-03-10
  • 打赏
  • 举报
回复
超出的只是在这次读出来会抛弃。下次读的时候不用清。可直接读。
elite01 2006-03-09
  • 打赏
  • 举报
回复
各位高手多指点啊
elite01 2006-03-08
  • 打赏
  • 举报
回复
cjf1009(农民程序员):

比较一般的做法是不是定义一个固定的字符串作为一次接收的结束?
先接收需要的数据,后接收分割字符串,
readbuffer(ProtocolSeparatorStr,SizeOf(ProtocolSeparatorStr))
这么用,
可会不会字节错位呢,
1,ReadBuffer是否读出就清理了Indy的缓存
2,如果接收的数据错了,是否要语句清空Indy缓存,还是先断开后连接即可
3,可否多线程共用一个Tidtcpclient实例,那么访问该实例是否要建立互斥量。

我可不小气,分不够会令开贴
cjf1009 2006-03-08
  • 打赏
  • 举报
回复
ReadBuffer是按长度来接收的,容错是你自己的事情
elite01 2006-03-07
  • 打赏
  • 举报
回复
我顶先

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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