我正在使用 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() 和 receive() 并执行先到的那个?
想做这样的事情..
if(send(sd, buffer, BUFLEN, 0) == true)
send something
else if(recv(sd, buffer, BUFLEN, 0) == true)
receive something
最佳答案
我相信您正在寻找类似select
(MSDN Page,man page)的东西。
使用它的基础知识如下:
使用要检查的套接字句柄加载
<fd_set
结构。加载一个fd_set
,其中包含要检查要接收的新数据的套接字,加载一个包含要发送的套接字的套接字,还可以选择加载一个包含要检查错误的套接字的fd_set
。调用
select
,将其传递给您的fd_set
结构体。当
select
返回时,您作为第二个参数传递的集合(readfds
)仅包含您传递给它的有数据等待的套接字。您可以对它们调用recv
,它将立即返回。作为第三个参数 (writefds
) 传递的集合包含已准备好写入的套接字。您可以对它们调用send
,它会立即返回。
关于c - TCP/IP 轮询客户端在 c 中发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105151/