- 论坛徽章:
- 0
|
本帖最后由 firefoxbug 于 2011-08-05 12:52 编辑
- C/C++ code
- //服务端 BOOL CALLBACK RecvDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- //code
- case ID_BTN_LISTEN: LisntenSock(hDlg) ;
- case FD_ACCEPT: AcceptSockProc((LPVOID)hDlg);
- /////////code
- VOID LisntenSock(HWND hwnd)
- {
- static TCHAR szErrorMsg[32] = {'\0'};
- WSADATA wsaData;
- SetTimer(hwnd,ID_TIMER,1000,myTimerProc);
- WSAStartup(MAKEWORD(2,0),&wsaData);
- sockSrv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if ( sockSrv == INVALID_SOCKET)
- {
- strcpy(szErrorMsg,"Bulid socket");
- SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
- }
- if (SOCKET_ERROR == WSAAsyncSelect (sockSrv, hwnd, WM_SOCKET_NOTIFY, FD_ACCEPT | FD_CLOSE))
- {
- SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Serevr");
- }
- sa.sin_family=AF_INET;
- sa.sin_port = htons(RECV_PORT);
- sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
- if(SOCKET_ERROR == bind(sockSrv,(SOCKADDR*)&sa,sizeof(SOCKADDR)))
- {
- strcpy(szErrorMsg,"Bind socket"); SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
- }
- int rlisten = listen(sockSrv,5);
- if(SOCKET_ERROR == rlisten)
- {
- strcpy(szErrorMsg,"Liten socket");
- SocketError(hwnd,TEXT("Error : %s"),szErrorMsg);
- }
- }
- VOID AcceptSockProc (LPVOID lpParameter)
- {
- HWND hwnd = (HWND)lpParameter;
- int len = sizeof(SOCKADDR);
- MessageBox(hwnd,TEXT("Accept After "),TEXT(""),MB_OK|MB_ICONERROR);
- sockConn = accept(sockSrv,(SOCKADDR*)&sa,&len );
- if(SOCKET_ERROR == sockConn)
- {
- SocketError(hwnd,TEXT("Error : %s"),"Accept");
- }
- sockSrv = sockConn;
- KillTimer(hwnd,ID_TIMER);
- SetDlgItemText(hwnd,IDC_EDIT_SERTEXT,"Connect Successfully!!");
- if (SOCKET_ERROR == WSAAsyncSelect(sockConn, hwnd, WM_SOCKET_NOTIFY, FD_READ | FD_WRITE | FD_CLOSE))
- {
- SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Client");
- } return ; }
- 客户端//
- BOOL CALLBACK SendDlgProc (HWND hDlg, UINT message,
- WPARAM wParam, LPARAM lParam)
- //code
- case ID_BTN_CONNECT:
- ConnectSocket(hDlg);
- case FD_CONNECT:
- MessageBox(hDlg,TEXT("In The FD_CONNECT"),"",MB_OK);
- ///code
- BOOL ConnectSocket(HWND hwnd)
- {
- WSADATA ws;
- struct sockaddr_in addr;
- static TCHAR szServeIP[32] = "127.0.0.1" ;
- SetDlgItemText(hwnd,IDC_EDIT_SERIP,szServeIP) ;
- long lRESULT = WSAStartup(2,&ws); //初始化socket库
- Client_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //建立socket
- if ( Client_sock == INVALID_SOCKET)
- {
- MessageBox(hwnd,TEXT("Bulid socket failed!"),TEXT("Socket Error"),MB_OK|MB_ICONERROR);
- return FALSE;
- }
- //ZeroMemory(target_IP,sizeof(target_IP)/sizeof(char));
- if (SOCKET_ERROR == WSAAsyncSelect (Client_sock, hwnd, WM_SOCKET_NOTIFY, FD_CONNECT | FD_READ | FD_WRITE))
- {
- SocketError(hwnd,TEXT("Error : %s"),"WSAAsyncSelect Client");
- }
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr(szServeIP);
- addr.sin_port = htons(SEND_PORT);
- connect(Client_sock,(struct sockaddr*)&addr,sizeof(addr));
- if (WSAEWOULDBLOCK != WSAGetLastError ())
- {
- MessageBox(hwnd,"After WAS","",MB_OK);
- SocketError(hwnd,TEXT("Error : %s"),"Socket Error");
- }
- }
复制代码 为什么连接不上去,甚至我不打开服务端,单单打开客户端连接的时候,也没有报错,直接就正常执行下来,但就是连接不上···到底是什么时候产生FD_CONNECT消息的 |
|