紧急求助:关于Indy9 的 TIdUDPServer通信问题(200分)

  • 主题发起人 主题发起人 loster2003
  • 开始时间 开始时间
L

loster2003

Unregistered / Unconfirmed
GUEST, unregistred user!
我公司的应用需要通过网络发送消息给客户,大概有2000个左右客户同时在线吧,客户端和服务器端都使用的是Indy 的 TIdUDPServer 控件(因为考虑到以后各个用户之间可以互相通信,类似QQ吧)。有很多用户都是通过路由器共享ADSL上网的,在应用中发现客户端刚刚连接上去一切正常(如,服务端收到客户端的地址为221.10.20.20,端口为23232),在一段时间不发送消息后,服务器端再向该地址及端口发送数据给客户端的时候,客户端基本上都收不到数据。用客户端发数据给服务器端,可以收到数据,但该客户在服务器端登记的UDP端口号已经同收到的数据内的端口号不一样了,请问问题在什么地方?
 
这是正常的...
你是服务器是不是放在公网上.而你的客户端是用在内部网的,也就是放在NAPT(一般都是这个)后的呢?
C(客户端),S(服务器)
这样的话.C连接S后.C与S之间就会有一个Section.有了这个Section之后.它们之间的通信才能正常进行.但是这个Secction是有一个期限的.当在这个期限之后.就会断开.此时服务器是没办法先跟C进行通信的.当S向C再发送数据时,C就会把S发来的这个数据包丢掉(由路由器来丢弃).当C向S发数据时,此时端口也就变化了..这里面有一个技术:UDP穿透NAPT技术.你在网上找下这方面的文章看一下.我在这里就不说了.(打字会打得手痛的....呵呵)
你要保证C与S之间的连接,就要定时的让C向S发送一个握手包.
这样就能确保它们之间通信的正常了.
 
楼上说得对哦.不知道你那里的情况是多长时间会话到期的.通常这个到期时间在不同的网络并不相同.据说一两秒到一分钟都有的.
 
一般不会的.你可以一分钟进行一次握手.QQ好像也是.你可以试试.你上线以后.然后把网线给搞掉.它差不多要一分钟后才会出现断线的情况
 
原来如此,多谢各位指教了[:)]
 
多人接受答案了。
 
后退
顶部