BOOL ClientInit(HWND hWnd,CString strAddr, long nPort)
{
struct sockaddr_in addrc;
int slen=0,len=0; CString saddr;

WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
  err = WSAStartup( wVersionRequested, &wsaData ); saddr=strAddr;
g_ClientSocket = socket(AF_INET, SOCK_STREAM,0);
 
//set the socket as async selection tag, the related message is CLIENT_MESSAGE
//the async events contain: read, write, close, connect
WSAAsyncSelect(g_ClientSocket,hWnd,CLIENT_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT);
addrc.sin_family=AF_INET;
addrc.sin_port=nPort;
addrc.sin_addr.s_addr=inet_addr(saddr);
bind(g_ClientSocket,(struct sockaddr*)&addrc,20);
len=sizeof(struct sockaddr); int rt=connect(g_ClientSocket, (struct sockaddr *)&addrc,len);        
if(rt!=0)
{
AfxMessageBox("连接失败");
return false;
} return true;
}
一使用WSAAsyncSelect(g_ClientSocket,hWnd,CLIENT_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT);则网络连接不上,注释则连接正常,这是为什么?

解决方案 »

  1.   

    疯了,你在哪看的代码写的,还是自己瞎想的,你把FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT加上去了,你觉得你这网卡还能干别的事吗?所有事情你都监控了,那它只能干你代码里面的事了。
    换成::WSAAsyncSelect(sListen,hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE);在响应里面再掉WSAAsyncSelect在监视这几个行为。