TCP / IP轮询客户端在c中发送和接收

时间:2012-10-27 23:38:55

标签: c unix networking tcp chat

我在c中使用tcp / ip创建聊天服务器和客户端。我做了服务器部分,它连接多个客户端。在客户端,我有一个while循环,可以发送一行,然后等待服务器回复。我想让客户端轮询send和recv函数来检查另一个客户端是否发送了一些东西。这就是我所拥有的 -

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

1 个答案:

答案 0 :(得分:2)

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

使用它的基础知识如下:

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

  • 致电select,将指针传递给fd_set结构。

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