在C中接收时发送

Spi*_*ire 3 c sockets blocking

我在我的服务器上创建了一段代码作为多线程

问题是,当我在另一个套接字上接收时,它不会发送数据.

因此,如果我向客户端2发送一些内容到客户端2,则client2仅在他自己发送内容时才会收到(跳出recv函数)..我该如何解决这个问题?

 /* Thread*/
while (! stop_received) {
        nr_bytes_recv = recv(s, buffer, BUFFSIZE, 0);

        if(strncmp(buffer, "SEND", 4) == 0) {
            char *message = "Text asads \n";
            rv = send(users[0].s, message, strlen(message), 0);
            rv = send(users[1].s, message, strlen(message), 0);
            if (rv < 0) {
                perror("Error sending");
                exit(EXIT_FAILURE);
            }           
        }else{
            char *message = "Unknown command \n";
            rv = send(s, message, strlen(message), 0);
            if (rv < 0) {
                perror("Error sending");
                exit(EXIT_FAILURE);
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*nes 8

更具体一点,有几种类型的I/O. 你目前所做的是阻塞i/o.一般来说,这意味着当你打电话sendrecv操作将"阻止"直到它完成.

与此相反,存在所谓的非阻塞i/o.在此i/o模型中,如果操作无法完成,则操作将立即返回.通常,该select函数与此i/o模型一起使用.

您可以在Select Tutorial中看到示例程序.完整的源代码位于页面底部.

正如其他人所说,你的另一个选择是使用线程.