gpt4 book ai didi

C++套接字窗口

转载 作者:可可西里 更新时间:2023-11-01 14:00:08 24 4
gpt4 key购买 nike

我有问题。我创建套接字、连接、发送字节,一切正常。

为了接收数据,我使用 recv 函数。

char * TOReceive= new char[200];

recv(ConnectSocket, TOReceive , 200, 0);

当它读取并返回一些数据时,成功,当没有数据等待数据时,我只需要限制等待时间,例如如果 10 秒没有数据它应该返回。

非常感谢。

最佳答案

Windows 套接字具有select 功能。您将套接字句柄和套接字传递给它以检查可读性和超时,它会返回告诉套接字是否变得可读或是否达到超时。

参见:http://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx

方法如下:

bool readyToReceive(int sock, int interval = 1)
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(sock, &fds);

timeval tv;
tv.tv_sec = interval;
tv.tv_usec = 0;

return (select(sock + 1, &fds, 0, 0, &tv) == 1);
}

如果它返回 true,您对 recv 的下一次调用应该会立即返回一些数据。

您可以通过检查 select 的错误返回值并在这些情况下抛出异常来使它更健壮。如果它说一个句柄已准备好读取,我在这里只返回 true,但这意味着我在所有其他情况下返回 false,包括已关闭的套接字。

关于C++套接字窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com