bonjour, j'ai code deux petites applications (client et serveur) et aux deux g applique la WSAAsyncSelect pour FD_READ, FD_CLOSE , FD_CONNECT (pour le client) et FD_ACCEPT (pour le serveur).
le serveur envoi la donnee "test". la fonction send renvoi bien la taille de "test", par contre che le client , le message FD_READ n est jamais genere..ceci est mon probleme.
voici els bout de codes correspondants:
client:
#define WM_SOCKET (WM_APP + 100)
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN sin;
char buffer[1024]="";
..ensuite..
case WM_SOCKET:
{
switch(LOWORD(lParam))
{
case FD_READ:
{
int i=0;
i=recv(wParam, buffer, sizeof(buffer), 0);
//SetWindowText(hwnd,buffer);
if(i==0)
{
MessageBox(hwnd,"ok","",MB_YESNO);
}
}
break;
case FD_CONNECT:
{
SetWindowText(hwnd,"Connected");
}
break;
case FD_CLOSE:
{
SetWindowText(hwnd,"Disconnected");
}
break;
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_CONNECT:
{
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
}
}
break;
case WM_CREATE:
{
hwnd_connect=CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Connect",WS_CHILD|WS_VISIBLE,25,50,150,35,hwnd,(HMENU)ID_CONNECT,HInstance,NULL);
WSAStartup(MAKEWORD(2,0), &WSAData);
sin.sin_addr.s_addr=inet_addr("127.0.0.1");
sin.sin_family=AF_INET;
sin.sin_port=htons(4148);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock,(SOCKADDR *)&sin,sizeof(sin));
WSAAsyncSelect(sock,hwnd,WM_SOCKET,FD_READ|FD_CONNECT|FD_CLOSE);
}
break;
puis cote serveur:
#define WM_SOCKET (WM_APP + 100)
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN csin;
HRESULT sAccept;
...ensuite...
case WM_SOCKET:
{
switch(LOWORD(lParam))
{
case FD_READ:
{
}
break;
case FD_ACCEPT:
{
sAccept=accept(wParam,NULL,NULL);
SetWindowText(hwnd,"Connected");
}
break;
case FD_CLOSE:
{
SetWindowText(hwnd,"Disconnected");
}
break;
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_LISTEN:
{
listen(sock, 0);
}
break;
case ID_SEND:
{
int i=0;
i=send(sock, "test", sizeof(char)*5, 0);
if(i!=0)
{
MessageBox(hwnd,"ok","",MB_YESNO);
}
}
break;
}
case WM_CREATE:
{
hwnd_listen=CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Listen",WS_CHILD|WS_VISIBLE,25,50,150,35,hwnd,(HMENU)ID_LISTEN,HInstance,NULL);
hwnd_send=CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Send",WS_CHILD|WS_VISIBLE,25,90,150,35,hwnd,(HMENU)ID_SEND,HInstance,NULL);
WSAStartup(MAKEWORD(2,0), &WSAData);
csin.sin_addr.s_addr = htonl(INADDR_ANY);
csin.sin_family=AF_INET;
csin.sin_port=htons(4148);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock,(SOCKADDR *)&csin,sizeof(csin));
WSAAsyncSelect(sock,hwnd,WM_SOCKET,FD_ACCEPT|FD_READ|FD_CLOSE);
}
break;
l3KTr0 Was HeRe