Winsock recv fehler



  • hallo, ich hab bei meinem tcp client das problem das er keine empfangenen
    daten zeigt. ich will mich mit einem smtp oder pop3 server verbinden.
    aber wenn ich einen befehl eingebe, bekommen ich vom server keine antwort?
    keine ahnung woran es liegt. wenn ich mich mit meinem computer über
    netcat verbinde, dann funktioniert das mit den datenaustausch.
    sobald ich es aber mit nem smtp/pop3 server probiert kommt keine
    antwort?

    hier mal der code:

    #include <stdio.h> 
    #include <stdlib.h>
    #include <conio.h> 
    #include <process.h>
    #include <windows.h> 
    #include <winsock2.h> 
    
    SOCKET s; char buf[2000];
    
    void WSockStart() { 
       int re; 
       WSADATA wsaData; 
       re=WSAStartup(MAKEWORD(2,0),&wsaData); 
       if(re==SOCKET_ERROR) exit(1);
    } 
    
    long HOSTtoIP(char* hostnameOrIp, SOCKADDR_IN* addr) { 
       long re; unsigned long ip; HOSTENT* abc; 
       if(hostnameOrIp==NULL || addr==NULL) exit(1);
       ip=inet_addr(hostnameOrIp); 
       if(ip!=INADDR_NONE){ addr->sin_addr.s_addr=ip; return(0); }
       else { abc=gethostbyname(hostnameOrIp); 
          if(abc==NULL) exit(1);
          else memcpy(&(addr->sin_addr),abc->h_addr_list[0],4); 
       return(0); } 
    } 
    
    void Send2(void *check) {
         StartSend: gets(buf); if(strcmp(buf,"quit")==0) {
             closesocket(s); WSACleanup(); exit(0); }
         send(s,buf,strlen(buf),0); goto StartSend;
    }
    
    int main(int argc, char *argv[]) {
       int re; char inpBuf[1024]; int inpBufPos=0, port; 
       SOCKADDR_IN addr;
       fd_set fdSetRead; TIMEVAL timeout; 
    
       if(argc<3) { 
          printf("Usage:  <Host/IP>  <Port>"); 
          getch(); return(1); } 
    
       WSockStart(); 
       memset(&addr,0,sizeof(SOCKADDR_IN)); 
       addr.sin_family=AF_INET;
       port=atoi(argv[2]);
       addr.sin_port=htons(port); 
       HOSTtoIP(argv[1],&addr); 
    
       s=socket(PF_INET,SOCK_STREAM,0); 
       if(s==INVALID_SOCKET) return(1);
    
       printf("Verbinde..."); 
       re=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); 
       if(re==SOCKET_ERROR) return(1);
       printf("  OK!\n\n"); 
       _beginthread(Send2,0,NULL);
       while(re!=SOCKET_ERROR) {
          FD_ZERO(&fdSetRead); 
          FD_SET(s,&fdSetRead); 
          timeout.tv_sec=2;
          timeout.tv_usec=0;
    
          while((re=select(0,&fdSetRead,NULL,NULL,&timeout))>0) { 
                re=recv(s,buf,2000,0); 
                if(re==0) { printf("Verbindung beendet!"); 
                            getch(); return(1); }
                else if(re==SOCKET_ERROR) return(1);
    
                buf[re]='\0'; 
                printf("Server: %s\n",buf);
          } } 
       return(0);
    }
    

    Danke!



  • Ich habe mal Code-Tags eingefügt, damit der Code formatiert ist. Ich verschiebe dich des Weiteren ins WinAPI-Forum, da Winsock dort dazu gehört.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole 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.



  • Dein Programmier Style ist unter aller Sau!



  • Meinung! schrieb:

    Dein Programmier Style ist unter aller Sau!

    Ja, und da weiß man gar nicht wo man mit der Kritik anfangen soll:

    Formatierung = Katastophe
    Logik = Katastophe
    Variablennamen = Katastophe
    Stil = Katastophe
    ...

    Nur ein Bsp.:

    long HOSTtoIP(char* hostnameOrIp, SOCKADDR_IN* addr) {
       if(blah) exit(1);
    aber immer
       return(0); }
    

    Too much Quatsch. 🙄


Anmelden zum Antworten