急!急!急!winsock server 问题,用win api函数 两个请求同时到达,accept有问题,送200分(200分)

  • 主题发起人 主题发起人 alongxu
  • 开始时间 开始时间
A

alongxu

Unregistered / Unconfirmed
GUEST, unregistred user!
本人现在做了一个winsock server ,起了一个非阻塞socket,liston(s,1)
WSAAsyncSelect(S_SOCKzx,form1.Handle,WM_ASYNCIONOTIFYzx,FD_ACCEPT);
WM_ASYNCIONOTIFYzx:为自定义消息,在自定义消息函数中ACCEPT(),发现两个客户端请求同时到达,ACCEPT()只接收socket队列中第一个socket,而丢失另一个。请各高手指点,我的email为xuolong@163.com,最好今天能解决。
 
listen(s,5)呢

listen(s,1)de 话socket好像是要丢弃队列里的另个连接的
 
listen(s,5)也不行,问题是几个windows消息基本上同时处理造成
 
不会吧,accept会创建一个新的socket,
你怎么accept的?
 
把你的message:WM_ASYNCIONOTIFYzx那段贴出来看看
 
下面程序供各位讨论:
WSAAsyncSelect(S_SOCKzx,form1.Handle,WM_ASYNCIONOTIFYzx,FD_ACCEPT );

PROCEDURE ClientWndProczx(VAR wMsg: TMessage);message WM_ASYNCIONOTIFYzx;
PROCEDURE TForm1.ClientWndProczx(VAR wMsg: TMessage);
begin
if (WSAGETSELECTERROR(WMSG.LParam))<>0 THEN
InvalidRequests:=InvalidRequests+1
ELSE
case WSAGetSelectEvent(wmsg.LParam) of
fd_accept:
ONACCEPTzx;
end;
end;



PROCEDURE TForm1.ONACCEPTzx;
VAR
var_sock:Tsocket;
BEGIN
var_sock:=WinSock.ACCEPT(S_SOCKzx,nil,nil);
if var_sock<>INVALID_SOCKET then
Tsocketthread.CREATE(FALSE,var_sock);
END;
 
原因我已找到,因为我在Tsocketthread中又创建了一个非阻塞SOCKET,用于与第三方通讯,在CONNECT后,用select来判断是否连接成功,只要执行select就会出现数据乱发现象。不知如何解决?
 
我帮助你ding!
 
后退
顶部