我有困惑
我用Tidtcpclient.WriteBuffer,发记录型的数据,
用ReadBuffer,收数据
问题是,我如在一长期的循环中这样做,万一对方多发一字节
我只是收,
那么我以后的数据不都乱了吗,这样不是很脆弱吗,
这是如何解决的

解决方案 »

  1.   

    ReadBuffer是按长度来接收的,容错是你自己的事情
      

  2.   

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

  3.   

    fffddd(杀我者死):
    readbuffer(ProtocolSeparatorStr,SizeOf(ProtocolSeparatorStr))
    它只读了SizeOf(ProtocolSeparatorStr) 个字节,如果多发了
    我在下个WriteBuffer后会读到上次留下的字节和本次需要的回复的
    字节的部分.
      

  4.   

    在一个长连接的SOCKET TCP通讯中,如果出现对方未按约定而多发一字节,最明智的方法是你自己抛出异常,并主动断开链接.
      

  5.   

    TCP层的责任是保证数据流的可靠性...如果多收到一字节,肯定也是对方应用程序发的.对于这种严重代码编写错误,还有什么必要维持链接呢?
      

  6.   

    halfdream(哈欠):
      感谢指教,
      多个Tidtcpclient实例可否共用一个端口而互不干扰地工作吗?