I've met the question is: when the client sends a message to the server, sending is successful, the service side but no response, no trigger FD_READ, I wondered, if I which step is wrong, but I see online are almost so write ah, please help me see what problem, thank you very much!
The code is as follows:
Server:
//Service. The CPP: Defines the entry point for the application. The
//
# include "stdafx. H"
#include
# include "resource. H"
#include
# define WM_SOCKET WM_USER + 1
BOOL CALLBACK DialogService (HWND hwndDlg, UINT uMsg, WPARAM WPARAM, LPARAM LPARAM);
The SOCKET g_Client;
Int APIENTRY WinMain (HINSTANCE HINSTANCE,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
Int nCmdShow)
{
//TODO: Place code here.
HWND Window=CreateDialog (hInstance, MAKEINTRESOURCE (IDD_SERVICE), NULL, DialogService);
WSADATA wd;
WSAStartup (0 x0202, & amp; Wd);
SOCKET sListen=SOCKET (AF_INET SOCK_STREAM, IPPROTO_TCP);
Int the error=0;
If (SOCKET_ERROR==sListen)
{
Error=WSAGetLastError ();
return -1;
}
SOCKADDR_IN sock_in;
Sock_in. Sin_family=AF_INET;
Sock_in. Sin_addr. S_un. S_addr=inet_addr (" 127.0.0.1 ");
Sock_in. Sin_port=htons (5050);
If (SOCKET_ERROR==bind (sListen, (SOCKADDR *) & amp; Sock_in, sizeof (sock_in)))
{
Error=WSAGetLastError ();
return -1;
}
If (SOCKET_ERROR==listen (sListen, 3))
{
Error=WSAGetLastError ();
return -1;
}
If (SOCKET_ERROR==WSAAsyncSelect (sListen, Window, WM_SOCKET FD_ACCEPT | FD_CLOSE))
{
Error=WSAGetLastError ();
return -1;
}
SendDlgItemMessage (Window, IDC_LIST1 LB_ADDSTRING, 0, LPARAM (" start Listen... "));
MSG MSG.
While (GetMessage (& amp; MSG, NULL, 0, 0))
{
TranslateMessage (& amp; MSG);
DispatchMessage (& amp; MSG);
}
return 0;
}
BOOL CALLBACK DialogService (HWND hwndDlg, UINT uMsg, WPARAM WPARAM, LPARAM LPARAM)
{
The switch (uMsg)
{
Case WM_SOCKET:
{
If (WSAGETASYNCERROR (lParam))
{
Closesocket (wParam);
SendDlgItemMessage (hwndDlg, IDC_LIST1 LB_ADDSTRING, 0, LPARAM (" disconnected with the customer!" ));
break;
}
The switch (WSAGETSELECTEVENT (lParam))
{
Case FD_ACCEPT:
{
G_Client=accept (wParam, NULL, NULL);
If (SOCKET_ERROR==g_Client)
{
break;
}
If (SOCKET_ERROR==WSAAsyncSelect (wParam, hwndDlg WM_SOCKET, FD_READ | FD_WRITE | FD_CLOSE))
{
break;
}
SendDlgItemMessage (hwndDlg, IDC_LIST1 LB_ADDSTRING, 0, LPARAM (" accept success! "));
}
break;
Case FD_READ:
{
Char szBuf [30]="";
If (SOCKET_ERROR==recv (wParam, szBuf, 30, 0))
{
SendDlgItemMessage (hwndDlg, IDC_LIST1 LB_ADDSTRING, 0, LPARAM (szBuf));
InvalidateRect (GetDlgItem (hwndDlg IDC_LIST1), NULL, TRUE);
break;
}
}
break;
Case FD_WRITE:
{
Char szBuf [30]="";
GetWindowText (GetDlgItem (hwndDlg IDC_INPUT), szBuf, 30);
SetWindowText (GetDlgItem (hwndDlg IDC_INPUT), "");
Int result=send (wParam szBuf, strlen (szBuf) + 1, 0).
If (SOCKET_ERROR==result)
{
Closesocket (wParam);
return -1;
}
//SendDlgItemMessage (hwndDlg, IDC_LIST1 LB_ADDSTRING, 0, LPARAM (szBuf));
}
break;
Case FD_CLOSE:
{
Closesocket (wParam);
break;
}
break;
}
}
break;
Case WM_COMMAND:
{
If (BN_CLICKED==HIWORD (wParam))
{
If (LOWORD (wParam)==IDC_SEND)
{
SendMessage (hwndDlg WM_SOCKET, g_Client FD_WRITE);
}
}
}
break;
Case WM_CLOSE:
The DestroyWindow (hwndDlg);
break;
Case WM_DESTROY:
The PostQuitMessage (NULL).
break;
Default:
return FALSE;
}
Return TRUE;
}
Client:
//Client. CPP: Defines the entry point for the application. The
//
# include "stdafx. H"
#include
# include "resource. H"
#include
#include
# define WM_SOCKET WM_USER + 1
BOOL CALLBACK DialogClient (HWND hwndDlg, UINT uMsg, WPARAM WPARAM, LPARAM LPARAM);
The SOCKET g_Client;
SOCKADDR_IN g_sock_in;
Int APIENTRY WinMain (HINSTANCE HINSTANCE,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
Int nCmdShow)
{
//TODO: Place code here.
The HWND Window;
The Window=CreateDialog (hInstance, MAKEINTRESOURCE (IDD_DIALOG1), NULL, DialogClient);
WSADATA wd;
WSAStartup (0 x0202, & amp; Wd);
G_Client=socket (AF_INET SOCK_STREAM, IPPROTO_TCP);
Int the error=0;
If (SOCKET_ERROR==g_Client)
{
Error=WSAGetLastError ();
return -1;
}
G_sock_in. Sin_family=AF_INET;
nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull