String kommt falsch an



  • Hi
    ich habe das 1. tut von C worker durchgemacht.
    Ich habe versucht vom Clienten einen String an den Server zu Senden.
    Dieser sollte dann den String ausgeben.
    Er gibt jedoch nur komische japanische Zeichen aus, anstatt den String.
    Hier mal die Codes:
    Client:

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstnace,
    				   PSTR szCmdLine, int iCmdShow)
    {
    	WSADATA wsa;
        if(WSAStartup(MAKEWORD(2, 0), &wsa) == 0)
    	    MessageBox(0, TEXT("Winsock 2 gestartet!"), TEXT("INFO"), 0);
    
        SOCKET s;
    	s = socket(AF_INET, SOCK_STREAM, 0);
        if(!(s == INVALID_SOCKET))
    	    MessageBox(0, TEXT("Socket erstellt"), TEXT("INFO"), 0);
    
    	SOCKADDR_IN addr;
    	memset(&addr, 0, sizeof(SOCKADDR_IN));
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(12345);
    	addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    
    	if(!(connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)) == SOCKET_ERROR))
    	    MessageBox(0, TEXT("Verbunden mit 127.0.0.1"), TEXT("INFO"), 0);
    
    	Sleep(2000);
    	char buf[256];
    	strcpy(buf,"Hallo wie gehts?");
    	send(s, buf, 9, 0);
    	return 0;
    
    }
    

    Und der Server

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstnace,
    				   PSTR szCmdLine, int iCmdShow)
    {
    	WSADATA wsa;
        if(WSAStartup(MAKEWORD(2, 0), &wsa) == 0)
    	    MessageBox(0, TEXT("Winsock 2 gestartet!"), TEXT("INFO"), 0);
    
        SOCKET acceptSocket;
    	acceptSocket = socket(AF_INET, SOCK_STREAM, 0);
        if(!(acceptSocket == INVALID_SOCKET))
    	    MessageBox(0, TEXT("Socket erstellt"), TEXT("INFO"), 0);
    
        SOCKADDR_IN addr;
    	memset(&addr,0,sizeof(SOCKADDR_IN));
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(12345);
    	addr.sin_addr.s_addr = INADDR_ANY;
    	if(!(bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)) == SOCKET_ERROR))
    		MessageBox(0, TEXT("BIND HAT GEKLAPPT!"), TEXT("INFO"), 0);
    
    	if(!(listen(acceptSocket, 10) == SOCKET_ERROR))
    	    MessageBox(0, TEXT("LISTEN HAT GEKLAPPT!"), TEXT("INFO"), 0);
    
    	SOCKET connectedSocket;
    	connectedSocket=accept(acceptSocket,NULL,NULL);
    	if(!(connectedSocket==INVALID_SOCKET))
    		MessageBox(0, TEXT("ACCEPT HAT GEKLAPPT!"), TEXT("INFO"), 0);
    
    	char buf[256];
    	recv(connectedSocket, buf, 256, 0);
    	MessageBox(0, (LPCWSTR)buf, TEXT("Vom Client gesendet"), 0);
    	return 0;
    
    }
    

    Wäre super wenn einer den Fehler sieht. Beide sind mit Multi Byte kompiliert.
    (habs auch schon mit unicode versucht)
    Danke



  • Wundert mich auch nicht wenn du ein char[] zu wchar_t[] castest für die MessageBox 🙄

    Außerdem könntest du den String ja auch komplett schicken (inklusive '\0'), statt den ersten 9Zeichen.



  • MessageBox(0, (LPCWSTR)buf, TEXT("Vom Client gesendet"), 0);
    

    Warum castest du buf, wenn du Multi-Byte verwendest?
    Außerdem solltest du die Sockets usw. wieder beenden.
    EDIT: ahh da war wieder einer schneller 😃



  • danke, es funktioniert jetzt.
    Wenn ich es jedoch einem Freund schicke und er mir die Nachricht über Internet schickt(also er den Client öffnet) dann muss ich den Port 12345 freischalten sonst geht es nicht.
    Gibt es da nicht irgendwelche standartports oder sowas? oder wie wird das gemacht?



  • Socket198 schrieb:

    danke, es funktioniert jetzt.
    Wenn ich es jedoch einem Freund schicke und er mir die Nachricht über Internet schickt(also er den Client öffnet) dann muss ich den Port 12345 freischalten sonst geht es nicht.
    Gibt es da nicht irgendwelche standartports oder sowas? oder wie wird das gemacht?

    Hehe, das ist schon Absicht, sonst könnt sich ja jeder mal eben auf deinen Rechner verbinden. 12345 ist sowieso standardmäßig gesperrt, das ist ein gängiger Trojaner-Port.



  • es gibt aber auch internetprogramme bei dennen man nicht vorher nen port öffnen muss oO



  • Ne gibts nicht, zumindest keine die eine solche Art von Verbindung erstellen.



  • doch z.b. alle online spiele icq usw?
    Gibt es einen port den man benutzen kann der immer offen ist?



  • Socket198 schrieb:

    doch z.b. alle online spiele icq usw?
    Gibt es einen port den man benutzen kann der immer offen ist?

    Da baust du ja auch die Verbindung auf, und beim z.B. ICQ Server sind die Ports offen.



  • ja ok die ports sind offen das bedeudetet ich kann über icq eine nachricht an den icq server schicken
    aber der icq server muss die nachricht ja dann an den empfänger schicken und dabei müsste ja der port wieder offen sein?



  • Socket198 schrieb:

    ja ok die ports sind offen das bedeudetet ich kann über icq eine nachricht an den icq server schicken
    aber der icq server muss die nachricht ja dann an den empfänger schicken und dabei müsste ja der port wieder offen sein?

    Dein Router denkt mit, und leitet die Antwort auf die ausgehenden Verbindungen an dich weiter. 😉



  • heißt das, dass wenn ich zuerst vom server was an meinem client sende das der client dann auch ohne portöffnung senden kann?



  • und wie machen das online spiele Oo?



  • Socket198 schrieb:

    heißt das, dass wenn ich zuerst vom server was an meinem client sende das der client dann auch ohne portöffnung senden kann?

    nein, eben nicht. der client muss zuerst eine verbindung zum server aufbauen!



  • Hast du schonmal ein Spiel gehostet? Falls ja, dann hast du schon festgestellt, dass du dafür Ports öffnen musst.
    Wenn du nur an einem Spiel oder sonst etwas teilnimmst, dann bist du als Client unterwegs, da musst du nichts machen.



  • nö bei wow zum beispiel das tu ich installieren und kann dann sofort spielen
    da muss ich gar nix freigeben



  • Socket198 schrieb:

    nö bei wow zum beispiel das tu ich installieren und kann dann sofort spielen
    da muss ich gar nix freigeben

    Aha 🙄

    Ich bezweifel, dass du zu Hause einen WoW Server betreibst. Falls doch würde ich das nicht an die große Glocke hängen.



  • ich glaube wir reden aneinander vorbei 😣
    also der Server läuft auf MEINEM pc und
    der client ist bei dem pc von meinem freund aber damit
    mein freund auf meinen server verbinden kann muss er die ports freigeben

    wenn ich mit dem wow client auf einen server(der übrigens nicht mir gehört) verbinden will muss ich auch keine ports angeben

    ich hab irgendwie nen blackout <.<



  • Socket198 schrieb:

    ich glaube wir reden aneinander vorbei 😣
    also der Server läuft auf MEINEM pc und
    der client ist bei dem pc von meinem freund aber damit
    mein freund auf meinen server verbinden kann muss er die ports freigeben

    wenn ich mit dem wow client auf einen server(der übrigens nicht mir gehört) verbinden will muss ich auch keine ports angeben

    ich hab irgendwie nen blackout <.<

    Das ist wohl untergegangen.

    Aber versuch doch mal mit vertauschten Rollen, er soll den Server laufen lassen und du verbindest dich.

    Als Client baust du die Verbindung zum Server auf und somit sollte ein gewöhnlicher Router den Verkehr nicht blockieren.



  • Tippgeber schrieb:

    Socket198 schrieb:

    ich glaube wir reden aneinander vorbei 😣
    also der Server läuft auf MEINEM pc und
    der client ist bei dem pc von meinem freund aber damit
    mein freund auf meinen server verbinden kann muss er die ports freigeben

    wenn ich mit dem wow client auf einen server(der übrigens nicht mir gehört) verbinden will muss ich auch keine ports angeben

    ich hab irgendwie nen blackout <.<

    Das ist wohl untergegangen.

    Aber versuch doch mal mit vertauschten Rollen, er soll den Server laufen lassen und du verbindest dich.

    Als Client baust du die Verbindung zum Server auf und somit sollte ein gewöhnlicher Router den Verkehr nicht blockieren.

    Nachtrag: es sei denn du benutzt immer noch Port 12345, dann wundert es mich nicht, wenn der den Port freigeben musste.


Anmelden zum Antworten