Home > Software engineering >  Win32API asynchronous selection model customers not triggered FD_READ message service end
Win32API asynchronous selection model customers not triggered FD_READ message service end

Time:11-07

The client and the server can connect successfully, when one of them is closed, another will be normal notified
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
  • Related