PROBLEM MIT SOckets -> FD_CONNECT



  • Hi, ich hab jetzt schon fast alles ausprobiert...ABER egal was ich mache... FD_CONNECT wird beim Clienten einfach nicht gepostet! Alles funktioniert... FD_READ, FD_CLOSE .... Also ich kann strings verschicken und empfangen... aber aus ieinem grund funktioniert es nicht eine Bestätigung als Client zu erhalten, wenn die Anfrage akzeptiert wurde... Ich hoffe ihr könnt helfEn !!!

    Server Socket Teil

    #include <windows.h>
    #include <winsock2.h>
    
    #define WM_SOCKET_NOTIFY (WM_USER + 1)
    
    ...
    
    void initwinsock()
    {
    
    	WORD wVersionRequested;
    	WSADATA wsaData;
    
    	wVersionRequested = MAKEWORD( 2, 0 );
    
    	WSAStartup( wVersionRequested, &wsaData );
    
    	}
    
    void winsockconnect(HWND hwnd)
    {
    	listen_socket = socket(AF_INET,SOCK_STREAM,0);
    
    	struct sockaddr_in addy2;
    
    	addy2.sin_family = AF_INET;
            addy2.sin_port = htons(1234);
    	addy2.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    	bind(listen_socket,(struct sockaddr*)&addy2, sizeof(addy2));
    
    WSAAsyncSelect(listen_socket,hwnd,WM_SOCKET_NOTIFY,FD_READ|FD_CLOSE|FD_ACCEPT);
    
    	listen(listen_socket, 5);
    
     	MessageBox(hwnd,"Bind ist erfolgreich! Listen()... ","Hinweis!",MB_ICONINFORMATION);
    }
    
    void closewinsock(HWND hwnd)
    {
        bytes = send(listen_socket,data,strlen(data),0);
    
        if (bytes == -1)
    	{
    		 MessageBox(hwnd,"Zeichen konnten nicht gesendet werden!","Hinweis!",MB_ICONINFORMATION);    
    
    	} 
    
    	WSASendDisconnect(listen_socket, NULL);
    	closesocket(listen_socket);
    	WSACleanup();
    }
    
    ...
    
            	case WM_SOCKET_NOTIFY:
    
                     SocketEvent = WSAGETSELECTEVENT(lParam);   
    
                     Socket = (SOCKET) wParam;
    
    			switch(SocketEvent)
    			{
    			case FD_READ:
    
    	        ilen = recv(listen_socket,data,255,0);
                    data[ilen]='\0';
    
                    MessageBox(hwnd,data,"Nachricht vom Client :",MB_ICONINFORMATION);   
    
    			return 0;
    
    			case FD_ACCEPT:
    
                    len = sizeof(client);
    
         		listen_socket = accept(Socket,(struct sockaddr*)&client, &len);
    
         			if(listen_socket == INVALID_SOCKET)
    
         			MessageBox(hwnd,"Verbindung fehlgeschlagen!","Hinweis!",MB_ICONINFORMATION);    
                     else      
                     MessageBox(hwnd,inet_ntoa(client.sin_addr),"Clientdaten",MB_ICONINFORMATION);          
    				return 0;
    
    			case FD_CLOSE:
    
                           closewinsock(hwnd);
    				MessageBox(hwnd,"Verbindung beendet!","Hinweis!",MB_ICONINFORMATION);      
    
    				return 0;
    }
    

    So der Server macht keine Probleme... Er bekommt das FD_ACCEPT Event gepostet und reagiert dementsprechend... aber wenn der Server die Verbindung eingeht...bekommt der Client kein FD_CONNECT 😕 WARUM 😕

    Client Teil

    void initwinsock()
    {
    
    	WORD wVersionRequested;
    	WSADATA wsaData;
    
    	wVersionRequested = MAKEWORD( 2, 0 );
    
    	WSAStartup( wVersionRequested, &wsaData );
    
    	}
    
    void winsockconnect(HWND hwnd)
    {
    	connect_socket = socket(AF_INET,SOCK_STREAM,0);
    
    	struct sockaddr_in addy2;
    
    	addy2.sin_family = AF_INET;
            addy2.sin_port = htons(1234);
    	addy2.sin_addr.s_addr = inet_addr("127.0.0.1");
    
            if(connect(connect_socket,(struct sockaddr*)&addy2,sizeof(addy2))==SOCKET_ERROR){
    	MessageBox(0,"Bei connect()","Socket Error",0);}
    
    else {                        
    
         WSAAsyncSelect(connect_socket,hwnd,WM_SOCKET_NOTIFY,FD_CONNECT|FD_READ|FD_CLOSE); }
    
    }
    
    void closewinsock(HWND hwnd)
    {
        bytes = send(connect_socket,data,strlen(data),0);
    
        if (bytes == -1)
    	{
    		 MessageBox(hwnd,"Zeichen konnten nicht gesendet werden!","Hinweis!",MB_ICONINFORMATION);    
    
    	} 
    
    	WSASendDisconnect(connect_socket, NULL);
    	closesocket(connect_socket);
    	WSACleanup();
    }
    
    ...
    
    	case WM_SOCKET_NOTIFY:
    
                  SocketEvent = WSAGETSELECTEVENT(lParam);   
    
    			switch(SocketEvent)
    			{
    			case FD_READ:
    				ilen = recv(connect_socket,data,255,0);
                    data[ilen]='\0';
    
                    MessageBox(hwnd,data,"Nachricht vom Server :",MB_ICONINFORMATION);   
    
    				return 0;
    
                case FD_CONNECT:
    
                     MessageBox(hwnd,"Verbindung hergestellt!","Hinweis!",MB_ICONINFORMATION);   <-- DIESE MESSAGE BOX EINFACH nicht! :(
    
                     return 0;
    
    			case FD_CLOSE:
                    closewinsock(hwnd); 
    				MessageBox(hwnd,"Verbindung beendet!","Hinweis!",MB_ICONINFORMATION);   
    
    				return 0;
    			}
    

    Also wo liegt der Fehler ?



  • Weil du connect() vor WSAAsyncSelect() ausführst?


Anmelden zum Antworten