Problem mit Socket-Programmierung



  • BasicMan01 schrieb:

    EDIT: du solltest dich auf eine Ein/Ausgabe-"Sprache" festlegen. Mal c++ mal c macht es recht unuebersichtlich 😃

    Hast du dafür eine gute Erklärung ? 🙂

    Gruss Unbekannter



  • Erklärung: JAa tue ich eigentlich auch nicht habe bloß dieses mal einfach den größten Teil des Codes rein kopiert ^^
    Nichts falsches denken ich hab den Code gelesen und ich denke auch verstanden ^^

    Habe nun aber ein weiteres Problem... ich möchte gerne den String überprüfen und wenn er "\\quit" lautet das programm beenden aber irgendwie reagiert das Programm gar nicht oO

    ...
        printf("\nZeichenfolge eingeben [max 256]: ");
        gets(buf);
    
        if(buf == "\\quit")
        {
          std::cout<<"Beende Programm...";
          Sleep(2000);
          break;
        }
    
        send(s,buf,strlen(buf),0);
    ...
    


  • 1336 h@xx0r xD schrieb:

    BasicMan01 schrieb:

    EDIT: du solltest dich auf eine Ein/Ausgabe-"Sprache" festlegen. Mal c++ mal c macht es recht unuebersichtlich 😃

    Hast du dafür eine gute Erklärung ? 🙂

    Gruss Unbekannter

    was heißt gut 🙂 ... man spart sich ne include. Außerdem ist es einfach ne Stilfrage.

    @WildChild ...
    CStrings vergleicht man mit der Funktion "strcmp" 😉



  • Ouh.. Danke 😃
    Ich kenne die Funktion wohl hab mir aber nie Gedanken drüber gemacht wieso ich das nicht direkt vergleichen sollte ^^
    Naja nun weiß ichs besser.. Danke sehr 🙂



  • Ok... ich habe eine weitere Frage ^^

    Ich habe mir gedacht ich schreibe einen Clienten der IP's von xx.xx.xx.xx bis xx.xx.xx.xx anspricht von Port xx bis xx.
    Eigentlich müsste der Client nun ja immer eine Meldung von wegen Verbindungsfehler und Fehlercode usw ausgeben... komischerweiße kriege ich aber immer nur den Fehlercode 10060 zurück, welcher soweit ich weiß ein Ping-Timout ist.
    Wenn ich nun meine eigene IP angeben und sie beispielsweiße von port 20 bis 22 anspreche kommt bei Port 20 und 22 ein 10060 bei 21, welcher ja der FTP Port ist, kommt aber ein Verbindung eingegangen.. Ich habe da aber keinen Clienten am laufen wie kann das also sein?

    Also meine Fragen, nochmal in aller Kürze ^^
    Wieso kann ich bei meiner eigenen IP auf Port 21 verbinden und warum kommt bei allen anderen IP's und Ports ein Fehlercode 10060?

    Hier mein Code:

    #include <iostream>
    #include <string>
    #include <winsock.h>
    
    using namespace std;
    
    int  StartWinsock(void);
    void InitDesign(void);
    
    int main(int argc, char *argv[])
    {
    	InitDesign();
    	StartWinsock();
    
    	if(argc < 5)
    	{
    		cout<<"Using: " << argv[0] << " <begin IP> <end IP> <begin port> <end port>" << endl;
    		return 1;
    	}
    
    	SOCKET Socket;
    	SOCKADDR_IN addr;
    
    	ULONG begin, end, beginP, endP, curr, currP;
    
    	begin  = ntohl(inet_addr(argv[1]));
    	end    = ntohl(inet_addr(argv[2]));
    	beginP = ntohl(inet_addr(argv[3]));
    	endP   = ntohl(inet_addr(argv[4]));
    
    	if(end < begin)
    	{
    		curr  = begin;
    		begin = end;
    		end   = curr;
    	}
    	if(endP < beginP)
    	{
    		currP  = beginP;
    		beginP = endP;
    		endP   = currP;
    	}
    
    	for(curr = begin; curr <= end; curr++)
    	{
    	    Socket = socket(PF_INET, SOCK_STREAM, 0);
    
    		memset(&addr, 0, sizeof(SOCKADDR_IN));
    		addr.sin_addr.s_addr = htonl(curr);
    		addr.sin_family      = PF_INET;
    
    		cout<< inet_ntoa(addr.sin_addr) << endl;
    
    		for(currP = beginP; currP <= endP; currP++)
    		{
    			addr.sin_port        = htons(currP);
    
    			cout<< currP << "\r";
    
    			if(connect(Socket, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
    				cout<<"Fehler: connect auf port " << currP << " gescheitert, Fehlercode: " << WSAGetLastError() << endl;
    			else
    				cout<<"Verbindung eingegangen auf Port: " << currP << endl;
    		}
            closesocket(Socket);
    	}
    	WSACleanup();
    }
    
    int StartWinsock(void)
    {
    	WSADATA wsa;
    	return  WSAStartup(MAKEWORD(2, 0), &wsa);
    }
    
    void InitDesign(void)
    {
    	system("COLOR 0A");
    }
    

    Bitte bitte bitte helft mir!
    Sonst kann ich heute nicht mehr schlafen 😃



  • Hm.. Also eigentlich sollte der Port 21 bei nem Desktop Rechner nicht ansprechbar sein? 😃



  • So wie man sieht hast du no überhaupt keine Ahnung was du da machst. Geschwiegen von der Programmiersprache. Also lerne die Grundlagen bitte...



  • 10060 (WSAETIMEDOUT) ist "Connection timed out. A connection attempt failed because the connected party did not properly respond after a period of time, or the established connection failed because the connected host has failed to respond."

    Unter win7 könntest du via "resmon" nachschauen ob auf Port 21 irgendwas lauscht, ansonsten über "netstat"



  • lernemaletwas schrieb:

    So wie man sieht hast du no überhaupt keine Ahnung was du da machst. Geschwiegen von der Programmiersprache. Also lerne die Grundlagen bitte...

    Magst du mir auch erklären wo ich nun so gar keine ahnung von der Programiersprache hab?
    Und ansonsten mal ne nützliche Antwort da lassen und nicht so ein sinnloses Gelaber...



  • Danke geeky^^
    Aber wieso is das denn so? Da müsste doch eigentlich einfach keine Verbindung zutande kommen oder?
    Und zu dem Port 21 ich geh da eine Verbindung ein egal welche ip ich nun versuche... Kann es sein das das normal ist weil da irgendwie ein ftp Server hintersitzt oder so?



  • Also es ist definiv nicht normal dass man seinen Rechner über Port 21 ansprechen kann. Das ist schon komisch.. netstat mal getestet?^^

    Abgesehen davon brauchst du für die Ports kein "inet_addr", und du solltest den Socket schließen und neu öffnen wenn eine Verbindung eingegangen wurde 😉

    Und dass man die Startparameter geschickter bearbeiten kann sollte klar sein, nur ist das zum testen wohl egal.

    Auf unregs wie "lernemaletwas" brauchste gar nicht reagieren, das sind selber meist nicht so die allerkrassesten 😃



  • Ja netstat ist aber nichts.. Und das komische ist ja auch, egal welche IP's ich nehme auf Port 21 kann ich eine Verbindung eingehen?!
    Und wie meinst du das mit den Startparametern?


Anmelden zum Antworten