免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4171 | 回复: 2
打印 上一主题 下一主题

WSAAsyncSelect模型问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-05 12:45 |只看该作者 |倒序浏览
本帖最后由 firefoxbug 于 2011-08-05 12:52 编辑
  1. C/C++ code

  2.     //服务端 BOOL CALLBACK RecvDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  3. //code
  4. case ID_BTN_LISTEN: LisntenSock(hDlg) ;
  5. case FD_ACCEPT: AcceptSockProc((LPVOID)hDlg);
  6. /////////code
  7. VOID LisntenSock(HWND hwnd)
  8. {
  9. static TCHAR szErrorMsg[32] = {'\0'};
  10. WSADATA wsaData;
  11. SetTimer(hwnd,ID_TIMER,1000,myTimerProc);
  12. WSAStartup(MAKEWORD(2,0),&wsaData);
  13. sockSrv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  14. if ( sockSrv == INVALID_SOCKET)
  15. {
  16. strcpy(szErrorMsg,"Bulid socket");
  17. SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
  18. }
  19. if (SOCKET_ERROR == WSAAsyncSelect (sockSrv, hwnd, WM_SOCKET_NOTIFY, FD_ACCEPT | FD_CLOSE))
  20. {
  21. SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Serevr");
  22. }
  23. sa.sin_family=AF_INET;
  24. sa.sin_port = htons(RECV_PORT);
  25. sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  26. if(SOCKET_ERROR == bind(sockSrv,(SOCKADDR*)&sa,sizeof(SOCKADDR)))
  27. {
  28. strcpy(szErrorMsg,"Bind socket"); SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
  29. }
  30. int rlisten = listen(sockSrv,5);
  31. if(SOCKET_ERROR == rlisten)
  32. {
  33. strcpy(szErrorMsg,"Liten socket");
  34. SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
  35. }
  36. }
  37. VOID AcceptSockProc (LPVOID lpParameter)
  38. {
  39. HWND hwnd = (HWND)lpParameter;
  40. int len = sizeof(SOCKADDR);
  41. MessageBox(hwnd,TEXT("Accept After "),TEXT(""),MB_OK|MB_ICONERROR);
  42. sockConn = accept(sockSrv,(SOCKADDR*)&sa,&len );
  43. if(SOCKET_ERROR == sockConn)
  44. {
  45. SocketError(hwnd,TEXT("Error : %s"),"Accept");
  46. }
  47. sockSrv = sockConn;
  48. KillTimer(hwnd,ID_TIMER);
  49. SetDlgItemText(hwnd,IDC_EDIT_SERTEXT,"Connect Successfully!!");
  50. if (SOCKET_ERROR == WSAAsyncSelect(sockConn, hwnd, WM_SOCKET_NOTIFY, FD_READ | FD_WRITE | FD_CLOSE))
  51. {
  52. SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Client");
  53. } return ; }


  54. 客户端//
  55. BOOL CALLBACK SendDlgProc (HWND hDlg, UINT message,
  56. WPARAM wParam, LPARAM lParam)
  57. //code

  58. case ID_BTN_CONNECT:
  59. ConnectSocket(hDlg);
  60.   case FD_CONNECT:
  61. MessageBox(hDlg,TEXT("In The FD_CONNECT"),"",MB_OK);
  62. ///code
  63. BOOL ConnectSocket(HWND hwnd)
  64. {
  65. WSADATA ws;
  66. struct sockaddr_in addr;
  67. static TCHAR szServeIP[32] = "127.0.0.1" ;

  68. SetDlgItemText(hwnd,IDC_EDIT_SERIP,szServeIP) ;

  69. long lRESULT = WSAStartup(2,&ws); //初始化socket库
  70. Client_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //建立socket
  71. if ( Client_sock == INVALID_SOCKET)
  72. {
  73. MessageBox(hwnd,TEXT("Bulid socket failed!"),TEXT("Socket Error"),MB_OK|MB_ICONERROR);
  74. return FALSE;
  75. }
  76. //ZeroMemory(target_IP,sizeof(target_IP)/sizeof(char));
  77. if (SOCKET_ERROR == WSAAsyncSelect (Client_sock, hwnd, WM_SOCKET_NOTIFY, FD_CONNECT | FD_READ | FD_WRITE))
  78. {
  79. SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Client");
  80. }
  81. addr.sin_family = AF_INET;
  82. addr.sin_addr.s_addr = inet_addr(szServeIP);
  83. addr.sin_port = htons(SEND_PORT);

  84. connect(Client_sock,(struct sockaddr*)&addr,sizeof(addr));

  85. if (WSAEWOULDBLOCK != WSAGetLastError ())
  86. {
  87. MessageBox(hwnd,"After WAS","",MB_OK);
  88. SocketError(hwnd,TEXT("Error : %s"),"Socket Error");
  89. }

  90. }
复制代码
为什么连接不上去,甚至我不打开服务端,单单打开客户端连接的时候,也没有报错,直接就正常执行下来,但就是连接不上···到底是什么时候产生FD_CONNECT消息的

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-08-05 13:22 |只看该作者
WM_SOCKET_NOTIFY对应的消息处理呢?

论坛徽章:
0
3 [报告]
发表于 2011-08-05 14:41 |只看该作者
case FD_ACCEPT: AcceptSockProc((LPVOID)hDlg);
  case FD_CONNECT:MessageBox(hDlg,TEXT("In The FD_CONNECT"),"",MB_OK);
就是在WM_SOCKET_NOTIFY消息内的····
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP