gpt4 book ai didi

c# - 无法使 Socket.Poll 和 Socket.Connected 正常工作

转载 作者:行者123 更新时间:2023-11-30 22:30:26 24 4
gpt4 key购买 nike

好吧,我知道有很多关于这方面的信息,我向你保证我已经阅读了所有内容并尝试了多种不同的方法来实现它!

我有一个在笔记本电脑上运行的套接字服务器程序。然后我有多达 50 台笔记本电脑通过同一个 LAN 无线连接到服务器。客户端笔记本电脑都连接到服务器(使用 Socket.ConnectAsync),服务器也使用异步方法发送和接收数据。服务器向用户显示已连接的客户端笔记本电脑列表,该列表似乎是准确的,并且会在客户端断开连接和连接时获取。然而,在某些情况下(即如果服务器程序崩溃,如果服务器笔记本电脑进入待机模式等),客户端笔记本电脑似乎永远不会检测到与服务器的连接何时丢失。每 5 秒连接一次,如下所示:

     bool SocketConnected(Socket s)
{
bool part1 = s.Poll(0, SelectMode.SelectWrite);

bool part2 = (s.Available == 0);
if (!part1 && part2)
{

return false;
}
else
{
return true;
}
}

我已尝试使用所有选择模式(SelectWrite、SelectRead、SelectError)并尝试使用不同的超时值。我已经尝试在这些操作之后检查 s.Connected 值,并尝试了各种其他方法来确定连接状态,但似乎没有任何结果产生可靠的结果!我想我可以通过每 5 秒发送一次虚拟信息并在这样做后检查 s.Connected 来达到我想要的结果,但是我真的不想这样做,因为每台笔记本电脑已经按原样向服务器发送了大量数据.非常感谢任何帮助!谢谢

最佳答案

检查连接是否存在的唯一可靠方法是向另一端发送一些东西,看看它是否到达。您可以通过不时发送和接收“ping”值手动执行此操作,也可以通过启用 KeepAlive socket option 自动执行此操作。 .

关于c# - 无法使 Socket.Poll 和 Socket.Connected 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648454/

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