2017-07-28 188 views
0

嗨我想写一个客户端应用程序,它将尝试连接远程服务器。如果无法连接到服务器,则会在5秒后再次尝试。如果套接字以某种方式关闭,它将尝试再次连接。客户端套接字连接问题

我发现了一个错误,如连接:传输端点已经连接

可能是什么问题呢?

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; 
    } 

回答

0

即使失败,您甚至可以在尝试连接之前重新连接套接字。你必须关闭它并创建一个新的。

+0

那么,你的观点是什么?我应该在我的代码中做什么? – voyvoda

+0

任何人都可以帮我吗? – voyvoda

+0

@voyvoda'你必须关闭它并创建一个新的'的部分,你不明白吗? '你想说啥?'确实。你在开玩笑吗? – EJP