0

我正在使用 c 中的 tcp/ip 制作聊天服务器和客户端。我制作了线程多个客户端的服务器部分。在客户端,我有一个 while 循环,可以发送一行,然后等待服务器回复。我想让客户端轮询发送和接收函数,以检查另一个客户端是否发送了一些东西。这就是我所拥有的——

while (1){
    char buffer[BUFLEN];
    memset(buffer, 0, sizeof buffer);
    gets(buffer);
    //sendall(sd, buffer, BUFLEN);
    send(sd, buffer, BUFLEN, 0);
    printf("sent:%s\n",buffer);
    //recvline(sd, buffer, BUFLEN);
    recv(sd, buffer, BUFLEN, 0);
    printf("recieved:%s\n", buffer);
}

如何同时轮询 send() 和 recv() 并执行最先出现的那个?

想做这样的事情。。

if(send(sd, buffer, BUFLEN, 0) == true)
   send something
else if(recv(sd, buffer, BUFLEN, 0) == true)
   receive something
4

1 回答 1

2

我相信您正在寻找类似selectMSDN Pageman page)的东西。

使用它的基本原理如下:

  • fd_set使用要检查的套接字句柄加载结构。加载一个fd_set带有要检查新数据接收的套接字,一个带有要发送的套接字,还可以选择一个带有要检查错误的套接字。

  • 调用select,将它的指针传递给您的fd_set结构。

  • 返回时select,您作为第二个参数 ( readfds) 传递的集合仅包含您传递给它的、等待数据的套接字。您可以调用recv它们,它会立即返回。作为第三个参数 ( writefds) 传递的集合包含准备写入的套接字。您可以调用send它们,它会立即返回。

于 2012-10-27T23:56:47.020 回答