Client <-> Server (send <-> recv) SOCKET



  • Hallo..

    ist das so Richtig ?

    Senden

    //.....
          else 
          {
          printf("Verbindung zu localhost!\n");
          strcpy(buf,"Hallo Anna!!!");
          rc=send(s,buf,13,0);
          }
    

    Empfangen

    //.....
          else 
          {
          printf("Eine Verbindung steht!\n");
          rc=recv(acceptSocket,buf,256,0);
          printf("::%s\n",buf);
          }
    

    Aber bei mir kommt irgendwie nix an 😞



  • rückgabewerte und errorcodes ( WSAGetLastError() und/oder GetLastError() ) sind deine freunde. 😉
    sind die sockets gültig?
    versuche deinen fehler etwas einzugrenzen.



  • ⚠ jow miller_m, war nen SOCKET falsch.. nun geht es sauber
    danke



  • moin,

    ich habe selbst nen problem mit den sockets:

    ich hole mir von einer i-seite meine derzeitige RechnerIP im netz.
    wenn ich jetzt mit connect arbeite, schtellt er zwar ne verbindung her, die wird aber gleich wieder gekappt.

    wenn ihr meinen code wollt:

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #include <process.h>
    
    //---------------------------------------------------------------
    //defines:
    
    #ifndef NULL
      #define NULL (void*)0
    #endif
    
    //---------------------------------------------------------------
    //global variables:
    
    SOCKET s;
    
    //---------------------------------------------------------------
    //funktions:
    
    long StartWinsock();
    void Fehler(char Fehlerbereich[100]);
    void recive(PVOID);
    
    //---------------------------------------------------------------
    
    int main(int argc, char *argv[])
    {
    	long rc;
    	SOCKADDR_IN addr;
    
    	rc = StartWinsock();
    
    	if(rc)
    	{
    		Fehler("StartWinsock gescheitert");
    	}
    	else
    	{
    		printf("Winsock gestartet\n");
    	}
    
    	s = socket(AF_INET, SOCK_STREAM, 0);
    
    	if(s == INVALID_SOCKET)
    	{
    		Fehler("Socket konnte nicht erstellt werden");
    	}
    	else
    	{
    		printf("Socket erstellt\n");
    	}
    
    	memset(&addr, 0, sizeof(SOCKADDR_IN));
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(12345);
    	addr.sin_addr.s_addr = inet_addr("217.184.15.70");
    
    	rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
    
    	if(rc == SOCKET_ERROR)
    	{
    		Fehler("connect gescheitert");
    	}
    	else
    	{
    		printf("Verbunden mit 217.184.15.70 (User)\n");
    	}
    
    	char buffer[257];
    	printf("\nBereit fuer die Eingabe (maximal 256 Zeichen)\n");
    
    	_beginthread(recive, 0, NULL);
    
    	while(1)
    	{
    		fgets(buffer, sizeof(buffer), stdin);
    
    		rc = send(s, buffer, strlen(buffer), 0);
    
    		if((rc == SOCKET_ERROR) || (!rc))
    		{
    			Fehler("send gescheitert");
    		}
    	}
    }
    
    //---------------------------------------------------------------
    
    long StartWinsock()
    {
    	WSADATA wsa;
    
    	return WSAStartup(MAKEWORD(2,0), &wsa);
    }
    
    //---------------------------------------------------------------
    
    void Fehler(char Fehlerbereich[100])
    {
    	char Fehlermeldung[200];
    	sprintf(Fehlermeldung, "Fehler: %s, fehler code: %d\n", Fehlerbereich, WSAGetLastError());
    	MessageBox(NULL, Fehlermeldung, "Schwerer Fehler", MB_ICONERROR | MB_OK);
    
    	_endthread();
    
    	exit(-1);
    }
    
    //---------------------------------------------------------------
    
    void recive(PVOID pvoid)
    {
    	long rc;
    	char buffer2[257];
    
    	while(1)
    	{
    		rc = recv(s, buffer2, 256, 0);
    
    		if((rc == SOCKET_ERROR) || (!rc))
    		{
    			Fehler("Verbindung getrennt");
    		}
    		else
    		{
    			buffer2[rc] = '\0';
    			printf("%s", buffer2);
    		}
    	}
    
    	return;
    }
    

    danke...



  • dein thread kann nicht auf die globale variable socket zurückgreifen somit ist
    sie ungültig 😉
    übergeb den socket mit an den thread

    _beginthread(recive, 0, &s);
    
    void recive(PVOID pvoid)
       SOCKET socket = *(SOCKET*)pvoid; 
    // ..
    


  • Danke, funktioniert aber immer noch nicht.

    Was kann ich tun, um den Fehler zu finden?


Anmelden zum Antworten