繁体   English   中英

C中的套接字未满足第一个客户端请求

[英]first client request not being served in sockets in c

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

服务器端

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

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

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

您需要恢复listen()调用。 – EJP

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM