0

我创建了一个客户端(在 C 中),它试图连接到服务器(在 VB 6.0 中),直到建立连接。如果服务器准备好监听,然后我们运行客户端程序尝试连接并发送消息,它工作正常并且客户端也收到响应。但是当我们在服务器之前启动客户端程序时,它会在很短的时间间隔后尝试连接到服务器,直到它被连接(在无限循环中)。当我们打开服务器时,客户端成功连接到服务器但没有发送消息。在这种情况下,我无法找到问题所在。我已经检查了客户端没有发送任何消息的“wireshark”。

当服务器在客户端之前运行而不是在其他情况下,程序为什么运行良好?

请建议如何找到问题。这是客户端程序的代码:

int
tcp_send()
{
    int sd, newSd, rc, i, cliSd, servLen, num, k, p;
    struct sockaddr_in servAddr;
    struct hostent *h;
    char si[4];
    char line[MAX_MSG];
    char message[MAX_MSG];
    struct  timeval tp;
    time_t now;
    char msg[MAX_MSG];  
    char str[MAX_MSG];

    strcpy(msg, "Hello World");

    servAddr.sin_family = AF_INET;
    servAddr.sin_addr.s_addr = inet_addr("111.1.1.11");
    servAddr.sin_port = htons(SERVER_PORT);

    /* create socket */
    sd = socket(AF_INET, SOCK_STREAM, 0);
    if(sd<0) 
    {
        exit(1);
    }
    rc = -1;    
    for (;rc!=0;)
    {
        /* connect to server */
        rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
        if(rc<0) 
        {
            sleep(2);
        }

    }

    memset(message, 0, sizeof(message));
    memset(si, 0, sizeof(si));
    num = strlen(msg);
    integertostring(si, num, 4);
    memcpy(message, si, 4);
    memcpy(message + strlen(message), msg, strlen(msg));

    rc = send(sd, message, strlen(message), 0);
    if(rc<0)
    {
      close(sd);
      exit(1);

    }

    sleep(1);
    read_line(sd,line);
    memset(line,0x0,MAX_MSG);

    return SUCCESS;
}
4

1 回答 1

4

尝试失败close后的套接字connect并重新创建它。

于 2012-08-30T11:59:51.100 回答