Sockets



  • hallo zusammen:

    Ich habe hier mal einen kleinen Beispiel-Server.
    Er soll auf Port 8080 lauschen und einen Text ausgeben, wenn sich ein Client
    verbunden hat.

    Problem: Die accept-Funktion wird aufgerufen, Port 8080 ist aber laut "netstat -a" nicht offen. Auch ein telnet localhost 8080 geht nicht.

    Ich finde den Fehler einfach nicht! Jemand aus dem IRC hat mir gesagt, dass der code bei ihm laufen würde ! 😕

    Hat jemand vielleicht einen Tipp ?!

    #include <iostream>
    #include <sys/socket.h>
    #include <arpa/inet.h> //htonl
    #include <netinet/in.h>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
    	int mySocket = -1;
    	int curSocket = -1;
    	struct sockaddr_in MyAd;
    	struct sockaddr remoteAd;
    
    	/*
    		TCP Socket erzeugen
    		AF_INET = IPv4
    		SOCK_STREAM = Stream socket -> TCP
    	*/
    	mySocket = socket(AF_INET,SOCK_STREAM,0);
    
    	/*
    	        AF_INET = IPv4
    		Port: 8080
    		INADDR_ANY = jedes Interface 
    	*/
    	memset(&MyAd,0,sizeof(MyAd));
    	MyAd.sin_family = AF_INET;
    	MyAd.sin_port = 8080;
    	MyAd.sin_addr.s_addr = htonl(INADDR_ANY);
    
    	//socket binden
    	int ret = bind(mySocket,(struct sockaddr *)&MyAd,sizeof(MyAd));
    	if(ret == -1)
    	{
    		cout << "bind error" << endl;
    		perror("bind");
    		return -1;	
    	}
    
    	//listen
    	if(listen(mySocket,3) == -1)
    	{
    		cout << "listen error" << endl;
    		perror("listen");
    		return -1;	
    	}
    
    	/*
    		What do i wrong ??
    		accept doesn't return, but i can't telnet
    		to localhost 8080 and netstat -a doesn't 
    		show an open port ?!
    		IT DOESN'T EVEN PRINT THE "listening..."-line !?!
    	*/	
    	socklen_t l = sizeof(remoteAd);
    	curSocket = accept(mySocket,(struct sockaddr*)&remoteAd,&l);
    	if(curSocket == -1)
    	{
    		cout << "accpet error" << endl; 
    		perror("accept");
    		return -1;	
    	}
    	else
    	{
    		cout << "a client has been connected" << endl;
    	}
    
    	return 0;
    }
    


  • hm das einzige was mir so auffaellt ist

    MyAd.sin_port = [b]htons[/b](8080);
    


  • Ich werd verrückt, das wars!
    Vielen Dank entelechie !!

    grup,
    grips


Anmelden zum Antworten