String kommt falsch an



  • 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.



  • addr.sin_port = htons(12345);
    

    das habe ich ihm clienten stehen
    Muss ich da dann 0 eintragen?



  • Socket198 schrieb:

    addr.sin_port = htons(12345);
    

    das habe ich ihm clienten stehen
    Muss ich da dann 0 eintragen?

    Nein, benutze einfach einen anderen Port. Was hast du gegen 43076 (hab ich mir spontan ausgedacht)?



  • Tippgeber schrieb:

    Socket198 schrieb:

    addr.sin_port = htons(12345);
    

    das habe ich ihm clienten stehen
    Muss ich da dann 0 eintragen?

    Nein, benutze einfach einen anderen Port. Was hast du gegen 43076 (hab ich mir spontan ausgedacht)?

    Aber es kann auch genau so gut sein, dass dein Freund in seinem Router eine Firewall hat und diese den Port blockiert hat und er diesen Port in der Firewall (auf seinem Router) freigeben musste.
    Ich würde mir da keine Gedanken machen, so lange du nicht bei mehreren Personen das Verhalten beobachtet hast.
    Wie gesagt teste doch selber mal als Client und lass den Server bei deinem Kumpel laufen.



  • ok danke das heißt du meinst das es nur nicht ging weil der port 12345 wegen trojaner gesperrt ist oder es an seinen einstellungne lag?
    Kann ich den jeden beliebigen port nehmen außer 12345 ?

    Und was war vorhin das problem? Dachtest du ich will vom server eine verbindung zum client aufnehmen?



  • du hast du vielleicht icq oder msn >.<? wäre super



  • Socket198 schrieb:

    ok danke das heißt du meinst das es nur nicht ging weil der port 12345 wegen trojaner gesperrt ist oder es an seinen einstellungne lag?
    Kann ich den jeden beliebigen port nehmen außer 12345 ?

    Und was war vorhin das problem? Dachtest du ich will vom server eine verbindung zum client aufnehmen?

    Nein, es war einfach ein Misverständnis. Ich weiß schon gar nicht mehr wie es dazu kam 😉

    Naja eigentlich ist an Port 12345 nichts schlimmes, aber der wird halt viel benutzt, eben auch von Trojanern. Daher kann ich mir gut vorstellen, dass der standardmäßig erstmal blockiert wird.

    Der Port war auf jeden Fall wegen seinem Router gesperrt, warum kann ich dir nicht sagen, ich kenne weder seinen Router noch dessen Konfiguration.



  • ich habe jetz nochma mit dem 43076 probiert bei nem anderen funktioniert aber auch nicht hast du icq?



  • also hier nochmal der Code:
    Client:

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstnace,
    				   PSTR szCmdLine, int iCmdShow)
    {
    	WSADATA wsa;
        WSAStartup(MAKEWORD(2, 0), &wsa);
        SOCKET s;
    	s = socket(AF_INET, SOCK_STREAM, 0);
    	SOCKADDR_IN addr;
    	memset(&addr, 0, sizeof(SOCKADDR_IN));
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(43076);
    	addr.sin_addr.s_addr=inet_addr("84.153.243.151"); // meine ip
    	connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
    	char buf[256];
    	strcpy(buf,"Hallo wie gehts?omg");
    	Sleep(5000);
    	send(s, buf, 20, 0);
    	return 0;
    
    }
    

    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(43076);
    	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, buf, TEXT("Vom Client gesendet"), 0);
    	return 0;
    
    }
    

    Wenn ich bei der ip 127.0.0.1 also meinen rechner angebe funktioniert es aber wenn ich den clienten verschicke an andere dann reagiert der server überhaupt nicht.



  • also natürlich ohne irgendwas beim port zu machen



  • Muss Dein Freund denn den Port überhaupt an seinem Router freigeben, oder evtl. an seiner Firewall?
    Mir wäre nämlich nicht bekannt, daß ein handelsüblicher Router AUSGEHENDE Verbindungen blockt. Von installierten personal Firewalls hingegen ist mir das wohl geläufig.



  • Belli schrieb:

    Muss Dein Freund denn den Port überhaupt an seinem Router freigeben, oder evtl. an seiner Firewall?
    Mir wäre nämlich nicht bekannt, daß ein handelsüblicher Router AUSGEHENDE Verbindungen blockt. Von installierten personal Firewalls hingegen ist mir das wohl geläufig.

    Eben, das meinte ich in meinen vorherigen zwei Posts auch.

    @Threadersteller, ja du musst schon die Ports in deinem Router freigeben, da du den Server laufen hast und der nimmt ja eingehende Verbindungen entgegen.



  • hi,
    also bei mir sind die Ports frei bei meinem Kumpel nicht.
    hat wer von euch icq damit ich es mit wem testen kann der sich auskennt?
    (und weiß das er keine personal firewall hat)?



  • ich werde doch beim clienten nicht die falsche ip eingetragen haben?
    Ich habe die von wieistmeineip.de genommen aber die ändert sich von tag zu tag



  • Deine IP ändert sich mit jeder Einwahl ins INet! Aber das Problem einer geänderten IP könnte man auch nicht durch Portfreigabe beseitigen.
    Leider hast Du meine Frage nicht beantwortet:
    Wo bzw. wie genau muß Dein Freund einen Port freigeben?

    Ich glaube übrigens nicht, daß Du hier jemanden findest, der sich Deinen Client auf den Rechner lädt und dann eine Verbindung zu Deinem Server aufbauen möchte ...



  • also mein freund muss tcp 43076 freigeben(den benutzt ja der quellcode)



  • Socket197 schrieb:

    also mein freund muss tcp 43076 freigeben(den benutzt ja der quellcode)

    Dein Freund soll mal in der Konsole "telnet <deine-ip> 43076" eingeben und schauen ob er sich auf den Port verbinden kann.



  • nein kann er nicht verbindung nicht möglich



  • also ich hab jetzt nochmal alles neu gemacht und siehe da es hat geklappt!
    Hier der Client:

    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        WSADATA wsa;
    	cout << "Socket Client" << endl;
    	if(WSAStartup(MAKEWORD(2,0), &wsa) == 0)
    	    cout << "Winsock gestartet" << endl;
    	else{
    	    cout << "Winsock konnte nicht gestartet werden" << endl;
    				system("PAUSE");
    		return 1;
    	}
    	SOCKET s;
    	s = socket(AF_INET, SOCK_STREAM, 0);
    	if(s == INVALID_SOCKET) {
    		cout << "Socket konnte nicht erstellt werden. Fehler: " << WSAGetLastError() << endl;
    		system("PAUSE");
    		return 1;
    	}
    	else
    		cout << "Socket erstellt" << endl;
    
    	SOCKADDR_IN addr;
    	const char* ip = "84.153.219.174";
    	memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(40791); // wir verwenden mal port 12345
    	addr.sin_addr.s_addr=inet_addr(ip); // zielrechner ist unser eigener
    	if(connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)) == SOCKET_ERROR) {
    		cout << "Connect nicht erfolgreich. Hier der Fehler: " << WSAGetLastError() << endl;
    		system("PAUSE");
    		return 1;
    	}
    	else
    		cout << "Verbunden mit " << ip << endl;
    
        char buf[256];
    	long rc;
    	strcpy(buf,"Hallo wie gehts?");
    	rc=send(s, buf, 17, 0);
        if(rc == SOCKET_ERROR)
    		cout << "Send hat nicht geklappt: " << WSAGetLastError() << endl;
    	else if(rc == 0)
    		cout << "Der Partner hat die Verbindung unterbrochen" << endl;
    	else
    	    cout << "Senden erfolgreich" << endl;
    	system("PAUSE");
    	return 0;
    }
    

    Und hier der Server:

    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        WSADATA wsa;
    	cout << "Socket Server" << endl;
    	if(WSAStartup(MAKEWORD(2,0), &wsa) == 0)
    	    cout << "Winsock gestartet" << endl;
    	else{
    	    cout << "Winsock konnte nicht gestartet werden" << endl;
    				system("PAUSE");
    		return 1;
    	}
    
        SOCKET acceptSocket = socket(AF_INET,SOCK_STREAM,0);
        if(acceptSocket==INVALID_SOCKET)
        {
    
    		cout << "Fehler: Der Socket konnte nicht erstellt werden: " << WSAGetLastError() << endl;
            system("PAUSE");
            return 1;
        }
        else
        {
        cout << "Socket erstellen erfolgreich" << endl;
        }
    
    	SOCKADDR_IN addr;
    	memset(&addr,0,sizeof(SOCKADDR_IN));
        addr.sin_family=AF_INET;
        addr.sin_port=htons(40791);
    	addr.sin_addr.s_addr=INADDR_ANY;
    
    	if(bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
    	{
    		cout << "Fehler bei bind: " << WSAGetLastError() << endl;
            system("PAUSE");
    		return 1;
    	}
    
    	else
            cout << "Bind hat geklappt" << endl;
    
    	if(listen(acceptSocket,10)==SOCKET_ERROR)
        {
    		cout << "Fehler: listen: " << WSAGetLastError() << endl;
            system("PAUSE");
            return 1;
        }
    	else
            cout << "Listen geklappt" << endl;
    
    	SOCKET connectedSocket;
    	connectedSocket=accept(acceptSocket,NULL,NULL);
        if(connectedSocket==INVALID_SOCKET)
    	{
    		cout << "Fehler: accept: " << WSAGetLastError() << endl;
    	    system("PAUSE");
            return 1;
    	}
        else
            cout << "Verbindung akzeptiert" << endl;
    
    	char buf[256];
    	long rc;
    	rc=recv(connectedSocket, buf, 256, 0);
        if(rc == 0)
    	    cout << "Die Verbindung wurde unterbrochen" << endl;
    	else if(rc == SOCKET_ERROR)
    		cout << "Fehler beim Empfangen: " << WSAGetLastError() << endl;
    	else
    		cout << "Erfolgreich Empfangen! Hier der Text" << endl << buf << endl;
    	system("PAUSE");
    	return 0;
    }
    

    Das ausschlaggebende war aber das ich den Port falsch freigeschaltet habe.
    Beim freischalten muss man den port an der IP 192.168.178.25 freischalten.
    Den hat fritzbox zufällig da reingeschrieben.
    Weiß wer was diese addresse bedeutet oder warum es die sein muss?
    Ich hab immer die von wieistmeineip.de genommen oO



  • Das ist deine Netzwerk-IP, die von meineip.de ist die, die dir dein Provider zuweist, bzw. deinem Router.
    Du solltest dir erst einmal grundlegende Netzwerkkenntnisse aneignen bevor du eigene Netzwerkanwendungen programmieren willst 😉


Anmelden zum Antworten