clientsocket 丢包 ( 积分: 100 )

  • 主题发起人 主题发起人 gggoobm
  • 开始时间 开始时间
G

gggoobm

Unregistered / Unconfirmed
GUEST, unregistred user!
clientsocket 收大量信息时,丢包.怎么解决?
另外大富翁全文检索怎么打不开...
 
丢了重发
 
TCP是不會丟包的,可能是你程序沒處理過來,或者你服務端處理的太慢了。
 
用 blocking 模式
 
强烈要求换成TIDTCPClient和TIDTCPServer去进行通信,因为他们是工作在阻塞模式下的。
 
ServerSocket写得太快
ClientSocket读得太慢
 
to xingkong97:
clientsocket serversocket 和 IDTCPClient IDTCPServer,各有各的脾气。我在用 IDTCPClient IDTCPServer时,如果通信未结束,而idtcpclient中途断开了,idtcpserver就会报错:Exception EOSError in module...
我在 TCPServerException 里面也 AException := nil;了,但是没用,用try except也没用
 
cs两端写个接收发送验证
 
如果采用TCP,则系统会在协议层确保数据发送的正常,如果你接收出错,则说明你的软件在处理接收的时候出现错误。cs两端采用发送验证是不可取的(UDP的例外),因为那是在应用层面再重复协议层面的事情(而且更加没有效率,会很慢的)。估计是你在处理“粘包”的时候出现问题了。如果你只是发送文件,可以采用两种方式来处理:
1、全部使用blocking模式;
2、在客户端使用尽可能大的(例如:8K大小)缓存来接收数据,然后通过Recv函数返回的值确定接收的实际字节数。
如果是发送结构,则最好采用blocking模式(delphi在MIDAS也采用这种方式)。以确保结构不被分包操作破坏^_^
 
后退
顶部