Socket异步通讯问题 ( 积分: 200 )

  • 主题发起人 主题发起人 masks
  • 开始时间 开始时间
M

masks

Unregistered / Unconfirmed
GUEST, unregistred user!
工作站与服务器以异步方式进行数据交换(WSAGetSelectEvent):
1.工作站先发送一个指令给服务器:
WinSock.Send(SocketClient, Buffer, BufSize, 0);
然后用一个等待循环等待服务器返回对应的处理信息。

2.服务器在接收到这个指令后,返回相应的数据给工作站,有可能返回的是一个文件等。

问题出在当双方的数据交换很频繁时,工作站在等待循环中会出现无限期等待,好像服务没有反应了。
如果在工作站Send一个指令后Sleep(30),接收到服务器的一个数据包后也Sleep(30),则这个问题出现的频率就降低了很多,但没有彻底解决。

请问各位有没有好的办法。
 
那是自然的,本来就有超时的,再一个sleep当然效率低了,可以采取队列的方式进行处理,先判断一下是否繁忙
 
可以用查询方式来探测服务器资源
 
delphipig,请问如何探测服务器资源,先探测服务器资源,然后再Send吗,有没有比较简单的例子。

按理来说,用TCP方式进行网络访问,应该是不丢包的,但实际是工作站Send后,服务器好像根本没有收到;
我用SetSockOpt对工作站接收和发送缓存进行扩大,这个问题出现的频率又降低了很多。
有哪位知道根本原因出在哪里?
 
并且这个问题还挑机器(针对工作站),试过低版本的操作系统如Win2000,Win98倒是没什么问题,换了Win2003,XP,VISTA,一个比一个严重
 
后退
顶部