c - 通过选择等待数据不起作用

标签 c sockets select network-programming

我目前正在从事一个项目,该项目涉及连接到服务器并等待数据的多个客户端。我正在使用选择并监视传入数据的连接。但是,客户端只是继续不打印任何内容,就好像 select 已经发现传入数据一样。也许我攻击这个错误?

对于服务器发送的第一条数据,它是正确显示的。然而,服务器随后断开连接,客户端继续输出空行。

        FD_ZERO(&readnet);
        FD_SET(sockfd, &readnet);   
while(1){

            rv = select(socketdescrip, &readnet, NULL, NULL, &timeout);
            if (rv == -1) {
                perror("select"); // error occurred in select()
            } else if (rv == 0) {
                printf("Connection timeout!  No data after 10 seconds.\n");
            } else {
                // one or both of the descriptors have data
                if (FD_ISSET(sockfd, &readnet)) {
                    numbytes = recv(sockfd, buf, sizeof buf, 0);
                    printf("Data Received\n");
                    buf[numbytes] = '\0';
                    printf("client: received '%s'\n",buf);
                    sleep(10);
                }
            }
        }

最佳答案

我认为您需要检查 recv 的结果.如果它返回零,我相信这意味着服务器已关闭套接字。

此外(取决于实现),您可能需要将 socketdescrip+1 传递给 select

关于c - 通过选择等待数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992547/

相关文章:

Mysql - 分组后连接两个表

c# - 多选 ctrl+button 在运行时点击

c++ - Big Endian 和 Little Endian 支持字节排序

c - 是否有任何代码片段演示内存泄漏或忘记释放内存分配的危害

kill 命令后关闭文件

mysql - 将 sql 查询结果存储在 pentaho 变量中

java - 如何使用套接字和 objectoutputstream 发送字符串数组

javascript - 为什么我没有从 JS 客户端(作为 Chrome 扩展)收到任何内容?

Android - 无法安装 *smartsocket* 监听器