0

我正在使用 C++/Cx (UWP) 上的 StreamSockets,我现在不知道如何更改保持活动的时间。我需要测试两个套接字(客户端和服务器),并在 15 秒后验证套接字是否仍然连接。我尝试像下面的代码一样定义保持活动时间,但我现在不知道获得一个响应需要多少时间。

客户端套接字:

if (_clientSocket == nullptr) {
    _clientSocket = ref new StreamSocket();
    _clientSocket->Control->KeepAlive = true;
}
return _clientSocket;

服务器套接字:

if (_serverSocket == nullptr) {
    try {
        _serverSocket = ref new StreamSocketListener();
        _serverSocket->Control->KeepAlive = true;


        Log::LogMessage(this->GetType()->FullName, Level::Info, "Server Socket created!");
    }
    catch (Exception^ excp) {
        Log::LogMessage(this->GetType()->FullName, Level::Info, "Error on create server socket = " + excp->ToString());
    }
}
return _serverSocket;

我如何定义 StreamSocket 的存活时间?

4

1 回答 1

0

_serverSocket->Control->KeepAlive = true;

当您将此属性设置为 TRUE 时,这意味着将发送低级别 TCP 保持活动数据包。默认值为假。您无法设置此 keep-alive 属性的时间。Keep-Alive 值由系统计算。

所有权转让

据此,您可以设置 TimeSpan (keepAliveTime) - 套接字代理服务应监视套接字活动的时间。因此,如果您将该值设置为 10 分钟,代理服务将监视 10 分钟的套接字活动,并以 KeepAliveExpired 为由触发 SocketActivityTrigger。但要小心,如果 keepAliveTime 值高于系统计算的 keepAliveTime 值,则根据系统值触发 KeepAliveExpired。

例如:您将 TimeSpan 设置为 20 分钟。但是系统每 5 分钟计算一次发送保持活动数据包的时间 - 这意味着每 5 分钟发送一次保持活动数据包,而不是每 20 分钟发送一次。

于 2017-01-26T09:40:06.477 回答