2017-07-28 4 views
0

Hallo Ich versuche, eine Client-Anwendung zu schreiben, die versuchen wird, einen Remote-Server zu verbinden. Wenn es keine Verbindung zum Server herstellen kann, wird es nach 5 Sekunden erneut versucht. Wenn der Socket irgendwie geschlossen ist, wird es versuchen, sich erneut zu verbinden.Client-Socket-Verbindung Problem

ich einen Fehler wie immer verbinden: Transport Endpunkt bereits

verbunden ist, was das Problem sein könnte?

static void sig_chld(int signo) 
{ 

    pid_t pid; 
    int stat; 
    while ((pid = waitpid(-1, &stat, WNOHANG)) > 0) 
     printf("child %d terminated\n", pid); 

    return; 
} 


int main(int argc, char *argv[]) 
{ 

int sockfd, numbytes; 
char buf[MAXDATASIZE]; 
pid_t childpid; 
struct hostent *he; 
struct sockaddr_in their_addr; /* connector's address information */ 

     if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */ 
      herror("gethostbyname"); 
      exit(1); 
     } 

     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { 
      perror("socket"); 
      exit(1); 
     } 

     their_addr.sin_family = AF_INET;  /* host byte order */ 
     their_addr.sin_port = htons(PORT); /* short, network byte order */ 
     their_addr.sin_addr = *((struct in_addr *)he->h_addr); 
     bzero(&(their_addr.sin_zero), 8);  /* zero the rest of the struct */ 


    for (; ;) { 


     while (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) 
     {    
      perror("connect"); 
       sleep(5); 
      } 


     if ((childpid = fork()) == 0) 
     { /* child process */ 
      while(1) 
      { 

       if (send(sockfd, "Hello, world!\n", 14, 0) == -1) 
       { 
          perror("send"); 
       } 

       sleep(3); 
      } 
      close(sockfd); 

     } 
    } 

     return 0; 
    } 

Antwort

0

Sie können einen Socket nicht erneut verbinden, wenn Sie einmal versucht haben, ihn vorher zu verbinden, selbst wenn er fehlgeschlagen ist. Sie müssen es schließen und ein neues erstellen.

+0

Also, was ist Ihr Punkt? Was soll ich in meinem Code tun? – voyvoda

+0

kann mir jemand helfen ???? – voyvoda

+0

@voyvoda Welchen Teil von "du musst es schließen und ein neues erstellen" hast du nicht verstanden? 'Worum geht es dir?' tatsächlich. Machst du Witze? – EJP