• Socket编程, 在server端read()函数调用后显示错误:Transport endpoint is not connected (犯了低级错误)


     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
    ", strerror(errno));
     6         }
     7         printf("server get connection from %s
    ", 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
    ", strerror(errno));
    11             exit(1);
    12         }
    13         message[n] = '';
    14         printf("receive the message of client: %s
    ", 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);
  • 相关阅读:
    spark集群安装部署
    CentOS7 下安装GUI图形界面GNOME
    Wininet请求包装类简稿
    Wininet下载类初稿
    MAC 编制计划任务
    弹出式窗口管理单元备忘
    rc资源文件的中英文应用备忘
    自备工具库
    界面方面的备忘
    多屏开发的备忘
  • 原文地址:https://www.cnblogs.com/KarryWang/p/3199959.html
Copyright © 2020-2023  润新知