LRESULT CDtestwinsockDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{ // TODO: Add your specialized code here and/or call the base class
int length,i;
WSADATA wsaData; /* 描述Windows Sockets实现细节的数据结构 */
int Status;
switch (message) { 
case UM_CONN:
  Status = WSAStartup(0x101, &wsaData);
if (Status != 0) {
AfxMessageBox("WSAStartup() failed\n");
PostQuitMessage(0);


if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion) != 1) { // 现在支持的版本时WINSOCK.DLL 1.1 //
AfxMessageBox("WSAStartup() Version not match\n");
WSACleanup();
PostQuitMessage(0);
}

hostaddr = gethostbyname("www.njut.edu.cn");
if (hostaddr==NULL) {
AfxMessageBox("gethostbyname ERROR \n");
WSACleanup();
PostQuitMessage(0);
} memcpy(&hostnm, hostaddr,sizeof(struct hostent));
// AfxMessageBox("good2!!!!!!!!");
break;
case UM_BUILD: 
if (!Client()) {
closesocket(s);
AfxMessageBox("Start Failed"); 
}
break;
...........................
...........................
BOOL  CDtestwinsockDlg::Client() /* 客户子程序 */
{
if ((s=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) {
AfxMessageBox("Socket Failed");
return (FALSE);
}
//去掉下面这一段(到103)就能连接成功,加上就不能运行,弹“connect failed”窗口
if (WSAAsyncSelect(s,this->m_hWnd,UM_SOCK,FD_CONNECT)==SOCKET_ERROR) {
AfxMessageBox("WSAAsyncSelect Failed");
return (false);
}
//103 memset((void *) &dst_addr, sizeof(dst_addr), 0);
dst_addr.sin_family = AF_INET;
dst_addr.sin_port = htons(USERPORT);
dst_addr.sin_addr.s_addr = *((unsigned long *)hostnm.h_addr_list[0]);
if (connect(s, (struct sockaddr *) & dst_addr, sizeof(dst_addr)) == SOCKET_ERROR) {
AfxMessageBox ("Connect Failed");
return (FALSE); }
return(TRUE);
}

解决方案 »

  1.   

    //去掉下面这一段(到103)就能连接成功,加上就不能运行,弹“connect failed”窗口
    if (WSAAsyncSelect(s,this->m_hWnd,UM_SOCK,FD_CONNECT)==SOCKET_ERROR) {
    AfxMessageBox("WSAAsyncSelect Failed");
    return (false);
    }
    //103
    放到
    if (connect(s, (struct sockaddr *) & dst_addr, sizeof(dst_addr)) == SOCKET_ERROR) {
    AfxMessageBox ("Connect Failed");
    return (FALSE); }的后面
      

  2.   

    同意楼上,连接后再设置异步事件
    http://search.csdn.net/Expert/topic/1500/1500550.xml?temp=.6825067