socket programm funktioniert nicht



  • hallo,
    ich hab nen Clienten und Server. Der Client Sendet was an den Server, jedoch regiert der Server nicht. Eigentlich folgt nach recv eine MessageBox. Diese wird aber nie ausgelöst. Woran kann das liegen? Danke
    Hier der Code
    Client:

    void Thread3 (PVOID pvoid)
    {
    		WSADATA wsa;
    	 SOCKADDR_IN addr;
    	 int rc;
    	static char bufffer[5];
    	if(WSAStartup(MAKEWORD(2, 0), &wsa) != 0)
    		  {
    			MessageBox(0, TEXT("Socket konnte nicht gestartet werden!"), szAppName, MB_ICONERROR);
    		  }
    		  s2 = socket(AF_INET, SOCK_STREAM, 0);
    		  if(s2 == INVALID_SOCKET) 
    		  {
    			MessageBox(0, TEXT("Socket konnte nicht erstellt werden!"), szAppName, MB_ICONERROR);
    		  }
    			 memset(&addr, 0, sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
    			 addr.sin_family = AF_INET;
    		     addr.sin_port = htons(40793); // wir verwenden mal port 40793
    			 rc = getAddrFromString(TEXT("IP"), &addr);
    			 if(rc == SOCKET_ERROR)
    			{
    	   			MessageBox(0, TEXT("Hostname konnte nicht aufgelöst werden!"), szAppName, MB_ICONERROR);
    			}
    		if(connect(s2, (SOCKADDR*)&addr, sizeof(SOCKADDR)) == SOCKET_ERROR) 
    		{
    			MessageBox(0, TEXT("Konnte nicht verbinden!"), szAppName, MB_ICONERROR);
    		}
    		while(1)
    		{
    			recv(s2, bufffer, 5, 0);
    			MessageBox(0, bufffer, bufffer, 0);
    		}
    }
    

    Server:

    BOOL CALLBACK DlgProc2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static int check[7];
    	int rc;
    	static SOCKET skey; SOCKET connectedSocket;
    	SOCKADDR_IN addr;
    	WSADATA wsa;
    	static char buffer1[5];
    	switch(message)
    	{
    	case WM_INITDIALOG:
    			for(int i = 0; i != 7; ++i)
    		check[i] = 0;
    	if(WSAStartup(MAKEWORD(2,0), &wsa) != 0)
    	{
    		cout << "Socket konnte nicht gestartet werden" << endl;
    	}
    	skey  = socket(AF_INET,SOCK_STREAM,0);
    	if(skey==INVALID_SOCKET)
    	{
    		cout << "Socket konnte nicht erstellt werden1" << endl;
    	}
    	memset(&addr,0,sizeof(SOCKADDR_IN));
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(40793);
    	addr.sin_addr.s_addr=INADDR_ANY;
    	if(bind(skey,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
    	{
    		cout << "Socket konnte nicht gebindet werden1" << endl;
    	}
    	if(listen(skey,10)==SOCKET_ERROR)
    	{
    		cout << "listen ist fehlgeschlagen1" << endl;
    	}
    	if(skey==INVALID_SOCKET)
    	{
    		cout << "Socket konnte nicht akzeptiert werden1" << endl;
    	}
    	connectedSocket = accept(skey,NULL,NULL);
    		 return TRUE;
    
    	case WM_COMMAND:
    		 switch(LOWORD(wParam))
    		 {
    		 case IDC_CHECK1:
    			  if(check[0]== 0)
    			  {
    				 strcpy(buffer1, "1");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[0];
    			  }
    			  else
    			  {
    			  	strcpy(buffer1, "10");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[0] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK2:
    			  if(check[1]== 0)
    			  {
    				 strcpy(buffer1, "2");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[1];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "20");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[1] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK3:
    			  if(check[2]== 0)
    			  {
    				 strcpy(buffer1, "3");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[2];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "30");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[2] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK4:
    			  if(check[3]== 0)
    			  {
    				 strcpy(buffer1, "4");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[3];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "40");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[3] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK5:
    			  if(check[4]== 0)
    			  {
    				 strcpy(buffer1, "5");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[4];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "50");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[4] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK6:
    			  if(check[5]== 0)
    			  {
    				 strcpy(buffer1, "6");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[5];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "60");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[5] = 0;
    			  }
    			  return TRUE;
    		 case IDC_CHECK7:
    			  if(check[6]== 0)
    			  {
    				 strcpy(buffer1, "7");
    				 send(connectedSocket, buffer1, 1, 0);
    				 ++check[6];
    			  }
    			  else
    			  {
    				 strcpy(buffer1, "70");
    			    send(connectedSocket, buffer1, 2, 0);
    				check[6] = 0;
    			  }
    			  return TRUE;
    		 case IDCANCEL:
    			  //EndDialog(hDlg, 0);
    			  return TRUE;
    
    		 }
    	}
    
    	return FALSE;
    }
    


  • Hier liegt der Fehler:

    static SOCKET skey; SOCKET connectedSocket;

    skey ist static, connectedScoket ist nicht static, nach dem 2. aufruf der Funktion hast du kein gültiges Handle mehr zum Socket mit welchem du verbunden hast mit accept()


Anmelden zum Antworten