Server empfängt und sendet nichts..



  • Du solltest die [cpp] Tags benutzen, dann wird alles schön bunt. Außerdem ist die von dir benutze iostream.h veraltet. Benutz die neue iostream Headerdatei.

    accpet() gibt ein gültiges socket zurück auf dem gesendet und empfangen werden kannt. Da du den rückgabewert von accept micht abfängst, hast du auch keins.

    mfg.



  • + SNIFFER



  • if(sock=accept(sock,(sockaddr*)&remote_host,&sin_size)==-1){ 
            cout<<"can't accept!"<<endl; 
            exit(EXIT_FAILURE); 
        }
    

    meinst du das ich sock neu initialisieren muss?
    klappt immer noch nicht..



  • accept gibt einen NEUEN socket zurueck. dein erster socket ist immernoch der serversocket aber der zurueckgegebene ist die akzeptierte verbindung.



  • c.rackwitz schrieb:

    accept gibt einen NEUEN socket zurueck. dein erster socket ist immernoch der serversocket aber der zurueckgegebene ist die akzeptierte verbindung.

    stimmt.

    mit accept nimmst du die "anfragen" entgegen.
    jedes accept gibt eine socket zurueck, "an" welcher ein client
    auf weiteres von dir wartet.

    kannst es wie ein telefon vorstellen.
    wenn du abnimmst hast du jemanden anderes, als dich, an der strippe.
    ist auch hier nicht anders.

    gg



  • c.rackwitz schrieb:

    accept gibt einen NEUEN socket zurueck. dein erster socket ist immernoch der serversocket aber der zurueckgegebene ist die akzeptierte verbindung.

    habe ich schon verstanden, aber dann ist das doch trotzdem richtig:

    if(sock=accept(sock,(sockaddr*)&remote_host,&sin_size)==-1){ 
            cout<<"can't accept!"<<endl; 
            exit(EXIT_FAILURE); 
        }
    

    😕

    wenn ja dann verstehe ich immer noch nicht wieso es nicht funktioniert.



  • socket ?? schrieb:

    habe ich schon verstanden, aber dann ist das doch trotzdem richtig:

    if(sock=accept(sock,(sockaddr*)&remote_host,&sin_size)==-1){ 
            cout<<"can't accept!"<<endl; 
            exit(EXIT_FAILURE); 
        }
    

    😕

    wenn ja dann verstehe ich immer noch nicht wieso es nicht funktioniert.

    Nein hast du nicht!

    if(NEWSOCK=accept(sock,(sockaddr*)&remote_host,&sin_size)==-1){ 
              cout<<"can't accept!"<<endl; 
            exit(EXIT_FAILURE); 
        }
    

    wobei ich nur die BSD sockets kenne ⚠
    sollte aber "fast" gleich sein. einfach einfacher zum anwenden.

    gg



  • ok, klar..
    man könnte ja aber trotzdem den alten überschreiben oder nicht?

    .. naja egal, so geht es trotzdem nicht:

    #include<winsock.h>
    #include<io.h>
    #include<iostream.h>
    
    int main()
    {
        int sock;
        struct sockaddr_in my_addr;
    
        char send[10];
        char recive[10];
    
        WSADATA wsaData;
        if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0){
            cout<<"Winsock error!"<<endl;
            exit (EXIT_FAILURE);
        }
        else
            cout<<"Winsock initialized!"<<endl;
    
        sock = socket (AF_INET, SOCK_STREAM, 0);
        if(sock == -1) {
            cout<<"Socket error"<<endl;
            exit (EXIT_FAILURE);
        }
        else
            cout<<"socket initialized!"<<endl;
    
        my_addr.sin_family = AF_INET;
        my_addr.sin_port = htons(5000);
        my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
        int sin_size = sizeof(struct sockaddr_in);
        sockaddr_in remote_host;
    
        if(bind(sock,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1){
            cout<<"bind error!"<<endl;
        }
        else
            cout<<"bind, ok!"<<endl;
    
        if(listen(sock,1) == -1){
            cout<<"can't listen.."<<endl;
            exit(EXIT_FAILURE);
        }
        else
            cout<<"listening.."<<endl;
    
    int nsock;
        if(nsock=accept(sock,(sockaddr*)&remote_host,&sin_size)==-1){
            cout<<"can't accept!"<<endl;
            exit(EXIT_FAILURE);
        }
        else
            cout<<"accept connection:"<<endl;
    
        if(recv(nsock,recive,sizeof(recive),0)==-1) {
            cout<<"can't recive"<<endl;
            exit(EXIT_FAILURE);
        }
    
        cout<<recive<<endl;
    
        if(send(nsock,send,sizeof(send),0)==-1) {
            cout<<"can't sending"<<endl;
            exit(EXIT_FAILURE);
        }
    
        closesocket(sock);
        WSACleanup();
    
        return 0;
    }
    

    😞



  • 🤡 schon gut.. ersparrt euch die antworten..
    habe den fehler verstanden..

    👍 danke an alle 😉 👍



  • wo ist der fehler? wir wollen dir mit spott und hohn eine praegende erinnerung schenken *g*



  • 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