Karry Wang  
 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);

 

posted on 2013-07-19 10:02  Karry Wang  阅读(4263)  评论(0编辑  收藏  举报