【发布时间】:2012-10-17 19:04:38
【问题描述】:
我正在使用 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
【问题讨论】:
-
您可能正在寻找
select()函数以在读取和写入文件描述符之间复用。 -
这将如何工作?你能解释一下吗?
-
不要假设 send() 或 recv() 来处理你在第三个参数中给他们的字符数;改用返回值。
-
关于select()-based services 检查那里。 (以及其他一百万个地方)
标签: c unix networking tcp chat