(win)Socket-Probleme



  • Moin,

    ich fange gerade an mich mit Netzwerkfunktionen auseinander zu setzen und wollte erstmal nen kleines Testprogramm schreiben, welches einfachen Daten verschicken kann. Es ist leider bis jetzt erst hablfertig, aber trotzdem hier mal der Code:

    #include <winsock.h>
    #include <iostream.h>
    
    void WSAInit(void)
    {
    	WORD wVersionReg = MAKEWORD(1, 1);
    	WSADATA wsaData;
    	if (int err = WSAStartup(wVersionReg, &wsaData) != 0)
        {
    		cout <<"Fehler: Initialisieren - WinSock.dll!";
        }
    }
    
    void main()
    {
    	int schluss;
    
    	cout << "TCP-IP-TEST-PROGRAMM\nVersion1.0\n\n";
    
    	//Winsocket initialisieren
    	WSAInit();
    	cout << "WINSOCKET initialisiert\n";
    
    	//Datenelement für IP und Port erstellen
    	struct sockaddr_in AdrClient;
    
    	AdrClient.sin_family = AF_INET;	// Wie wird connected (standart)
    	AdrClient.sin_addr.s_addr = inet_addr("127.0.0.1"); // Was wird connected
    	AdrClient.sin_port = 5002; // Über welchen Port
    
    	cout << "Client-Daten gesetzt\n";
    
    	//Sockets erstellen
    	int client;
    
    	//Sockets mit Daten füttern
    	if ((client = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)  //Typ der Verbindung/Socket festlegen
    		cout << "Fehler beim Erstellen des Client-Socket!\n";
        else
    		cout << "Client-Socket initialisiert\n";
    
    	//Client-Socket connecten
    	if ( connect (client, (struct sockaddr *) &AdrClient, sizeof(AdrClient)) == SOCKET_ERROR)
         cout << "Fehler beim Connecten mit Server!\n";
    	else
    		cout << "Client mit Server connected\n";
    
    	closesocket(client);	
    	cout << "Sockets geschlossen!\n";
    
    	cin >> schluss;
    }
    

    Nun möchte ich auf nen Server connecten.
    Deswegen geb ich ja einen bestimmt Port an (in AdrClient.sin_port).
    Problem ist, dass die connect() nur sockaddr * annimmt, aber kein sockaddr_in, den ich benutze um den Port zu übermitteln.
    Jetzt beim Umwandeln fallen natürlich sin_port und Co. weg, sodass ein willkürlicher Port genommen wird.

    In den Tutorials die ich habe klappt es mal mit und mal ohne Umwandlung, bei mir geht beides nicht.

    Jemand ne Idee was ich falsch mache??

    Dank im Voraus!

    Gruß
    chackie-lee



  • Ok, hab den Fehler schon selber gefunden!

    Es fehlt das htons(port) bei AdrClient.sin_port = 5002;
    Also:

    AdrClient.sin_port = htons(5002);
    

    Gruß
    chackie-lee



  • chackie-lee schrieb:

    htons

    host-to-network-short



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten