Ani*_*mar 4 c++ client-server visual-c++
我有客户端代码,它使用 UDP 和recvfrom()
. 这在服务器开启时工作正常,但是一旦我停止服务器,我的客户端程序就会挂起;我怀疑 recvfrom() 正在等待来自服务器的响应。
如果服务器和客户端都安装在同一个系统上,recvfrom()
当服务器关闭时我会收到错误,但是当服务器和客户端在不同的系统上时,客户端在 recvfrom() 处挂起,因为服务器没有响应因为它关闭。
请有人可以让我知道我该如何处理这种情况,也许定时器信号中断可以解决这个问题..任何人都可以对此有所了解吗?
我正在使用 Visual Studio 2005。
您的呼叫正在阻塞,因为目前没有此套接字的数据。当服务器打开时,它发送数据的速度足够快,所以recvfrom
调用得到它并很快返回。当服务器关闭时,没有人发送数据并recvfrom
永远等待。服务器是打开还是关闭都没有关系,recvfrom
在两种情况下都在做同样的事情;你只是没有注意到第一种情况的延迟。
您需要使用非阻塞套接字。在非阻塞模式下,recvfrom
没有数据时会返回错误,而不是等待。然后,您可以使用select
call to sleep,直到发生超时或数据到达。