1 for(;;){
 2         socklen_t len = sizeof(client_address);
 3         connfd = accept(listenfd, (struct sockaddr *)&client_address, &len);
 4         if(connfd < 0){
 5             printf("accept error: %s\n", strerror(errno));
 6         }
 7         printf("server get connection from %s\n", inet_ntop(AF_INET, &client_address.sin_addr, buff, sizeof(buff)));
 8 
 9         if((n = read(listenfd, message, 1024)) == -1){
10             printf("read error: %s\n", strerror(errno));
11             exit(1);
12         }
13         message[n] = '\0';
14         printf("receive the message of client: %s\n", message);
15         close(connfd);
16 
17     }

      刚接触unix网络编程, 在进行简单的client/server通信时犯了低级错误, 上面的代码为server端的接收client链接请求并显示client传过来的信息, accept函数成功后返回一个内核生成的一个全新的描述符 赋值给connfd, 所以后面调用read()函数时, 第一个参数应该是connfd 而不是 listenfd。 所以代码第9行应该改为

        if((n = read(connfd, message, 1024)) == -1){ 

附:

int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

int read(int handle, void *buf, int nbyte);

 

相关文章:

  • 2021-07-27
  • 2021-09-02
  • 2022-12-23
  • 2021-07-23
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
猜你喜欢
  • 2021-11-29
  • 2021-11-17
  • 2022-01-10
  • 2021-04-02
  • 2022-03-02
  • 2022-12-23
  • 2021-11-03
相关资源
相似解决方案