Witam. Na poczatek informuje ze dopiero zaczynam zabawe z WinSock dlatego prosze o wyrozumialosc... Pisze program client/serwer i mam juz problem, na samym poczatku bo nie wyglada no to ze nie ma polaczenia, korzystam z kursu z winapi.org i jeszcze jakiegos z neta...
kawałek kodu:
SERWER:
LRESULT CALLBACK WndProc ( HWND hwnd , UINT message , WPARAM wParam , LPARAM lParam )
{
HDC hdc ;
PAINTSTRUCT ps ;
static SOCKET nasluchujacy , polaczony ;
struct sockaddr_in my_addr , their_addr ;
int size ;
static TCHAR szBuffer [ MAX_PATH ] ;
wsprintf ( szBuffer , TEXT ( "Brak połączeń" ) ) ;
switch ( message )
{
case WM_CREATE:
my_addr.sin_addr.s_addr = INADDR_ANY ;
my_addr.sin_family = AF_INET ;
my_addr.sin_port = 8080 ;
memset ( &( my_addr.sin_zero ) , '\0' , 8 ) ;
nasluchujacy = socket ( PF_INET , SOCK_STREAM , 0 ) ;
if ( !nasluchujacy )
{
MessageBox ( hwnd , TEXT ( "Błąd" ) , NULL , MB_OK | MB_ICONERROR ) ;
}
bind ( nasluchujacy , ( struct sockaddr * ) & my_addr , sizeof ( struct sockaddr ) ) ;
listen ( nasluchujacy , 5 ) ;
WSAAsyncSelect ( nasluchujacy , hwnd , WM_USER , FD_ACCEPT | FD_CONNECT | FD_READ | FD_WRITE ) ;
return 0 ;
case WM_USER :
switch ( WSAGETSELECTEVENT ( lParam ) )
{
case FD_ACCEPT :
polaczony = accept ( nasluchujacy , ( struct sockaddr * ) & their_addr , & size ) ;
wsprintf ( szBuffer , TEXT ( "Klient podłączony" ) ) ;
InvalidateRect ( hwnd , NULL , TRUE ) ;
break ;
case FD_CONNECT :
break ;
}
return 0 ;
case WM_PAINT:
hdc = BeginPaint ( hwnd , &ps ) ;
TextOut ( hdc , 10 , 10 , szBuffer , lstrlen ( szBuffer ) ) ;
EndPaint ( hwnd , &ps ) ;
return 0 ;
case WM_DESTROY:
closesocket ( nasluchujacy ) ;
PostQuitMessage ( 0 ) ;
return 0 ;
}
return DefWindowProc ( hwnd , message , wParam , lParam ) ;
}
KLIENT:
LRESULT CALLBACK WndProc ( HWND hwnd , UINT message , WPARAM wParam , LPARAM lParam )
{
HDC hdc ;
PAINTSTRUCT ps ;
static SOCKET klient ;
struct sockaddr_in my_addr ;
switch ( message )
{
case WM_CREATE:
klient = socket ( PF_INET , SOCK_STREAM , 0 ) ;
my_addr.sin_addr.s_addr = INADDR_ANY ; // inet_addr ( "10.4.12.2" )
my_addr.sin_family = AF_INET ;
my_addr.sin_port = htons ( 8080 ) ;
memset ( &( my_addr.sin_zero ) , '\0' , 8 ) ;
if ( !klient )
{
MessageBox ( hwnd , TEXT ( "Błąd" ) , NULL , MB_OK | MB_ICONERROR ) ;
}
if ( !connect ( klient , ( struct sockaddr * ) &my_addr , sizeof ( struct sockaddr ) ) )
{
MessageBox ( hwnd , TEXT ( "Nie można nawiązać połączenia" ) , NULL , MB_OK | MB_ICONERROR ) ;
}
WSAAsyncSelect ( klient , hwnd , WM_USER , FD_CONNECT | FD_READ | FD_WRITE | FD_ACCEPT ) ;
return 0 ;
case WM_PAINT:
hdc = BeginPaint ( hwnd , &ps ) ;
EndPaint ( hwnd , &ps ) ;
return 0 ;
case WM_DESTROY:
closesocket ( klient ) ;
PostQuitMessage ( 0 ) ;
return 0 ;
}
return DefWindowProc ( hwnd , message , wParam , lParam ) ;
}
Co tu jest zle, wydaje mi sie ze wszystko zrobilem tak jak w kursie... chodzi o to, ze po wlaczeniu serwera, mam w nim komunikat Brak polaczen... nastepnie wlaczam klienta... i nadal to samo, mimo ze komunikat powinien sie zmienic... co jest nie tak?