第一个客户端请求未在c中的套接字中提供

时间:2015-10-18 00:40:22

标签: c sockets server client

这是一个简单的迭代客户端 - 服务器程序。服务器在成功建立连接时打印出“已接收请求”。

服务器端

#define LENGTH 256
#define SERV_PORT 4000  
#define LISTENQ 8
int main()
{
    int listenfd, connfd, n;
    socklen_t clilen;
    char buf[LENGTH];
    struct sockaddr_in cliaddr, servaddr;

    //creation of socket
    listenfd = socket (AF_INET, SOCK_STREAM, 0);

    //creating socket address
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(SERV_PORT);
    bind (listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
   // printf("\nServer running.. waiting for connections");

   // listen(listenfd, LISTENQ);

    for(; ;)
    {

        clilen = sizeof(cliaddr);
        connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);
        printf("\nReceived request");
        //sleep(5);

    } 



    return 0;
}

客户端

#define LENGTH 256
#define SERV_PORT 4000  

int main( int argc, char *argv[])
{
    int sock;
    struct sockaddr_in server;
    struct hostent *hp; 
    char buff[256];

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("socket failed");
        exit(1);
    }

    server.sin_family = AF_INET;

    hp = gethostbyname(argv[1]);
    if(hp == 0)
    {
        perror("gethost by name failed");
        exit(1);
    }
    memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
    server.sin_port = htons(4000);

    if(connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0)
    {
        perror("\nconnect failed");
        exit(1);
    }
       return 0;       
   }

当我运行多个客户端 - 服务器代码时,第一个客户端的输出与前面的客户端不同。我需要第一个客户端像其他客户端一样输出。有人可以帮忙吗?

当第一个客户端与服务器建立连接时,服务器不输出“已接收请求”,其中,其他客户端输出“已接收请求”。

1 个答案:

答案 0 :(得分:1)

您需要恢复listen()来电。 - EJP