gpt4 book ai didi

c# - 使用 C# 连接/重试连接的最有效方法?

转载 作者:行者123 更新时间:2023-11-30 21:23:13 30 4
gpt4 key购买 nike

我正在创建一个小游戏客户端,它最终会连接到服务器以收集有关可用游戏、有多少玩家正在玩以及您可以想象它应该做的各种其他事情的一些信息。

我的困难在于找到一种有效的方法来处理首次加载时的连接/重试连接序列。

我想象我的客户在尝试连接时会遵循这个过程:

  1. 执行客户端应用
  2. 尝试建立连接
  3. 如果连接成功收集信息 - 如果不成功继续第 4 步
  4. 显示一个新的对话框/表单,提示用户正在尝试建立连接
  5. 循环直到建立连接

我一直在质疑我尝试遵循这个顺序的方法。我质疑这是否是正确/最有效的连接方式,以及为什么我在第 4 步中显示的表单不起作用?

try
{
sock.Connect(authenServerEP);
// Once connected show our main client window
this.Show();
// Create the LoginForm once a connection has been established and display
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
if (false == loginForm.Visible)
{
loginForm.Dispose();
}
}
catch (SocketException firstConnectException)
{
// Load retrying connection form
EstablishingConnectionForm establishingConnectionForm = new EstablishingConnectionForm();
establishingConnectionForm.Show();

bool connected = false;
// Loop until we are connected
while (!connected)
{
try
{
sock.Connect(authenServerEP);
connected = true;
establishingConnectionForm.Dispose();
}
catch (SocketException retryConnectException)
{
// Pass and retry connection
}
}
} // end catch (SocketException firstConnectException)

如您所见,我捕获了在连接到服务器时出现问题(例如服务器未运行)时引发的 SocketException。然后我继续尝试不断循环直到建立连接。我不知道我是否应该这样做。有没有更好的方法来做到这一点?

此外,当我使用 Show() 显示 establishingConnectionForm 时,它看起来并不像所有的表单/工具都初始化(初始化可能会产生误导)。表单上的标签只是以白色阴影显示,而不是显示其文本。不仅如此,我似乎无法选择表单/对话框并实际移动它。它与“思考/工作”鼠标图标一起坐在那里。现在我认为这是因为我正在循环尝试重新连接并因此而阻塞(我在阻塞上可能是错误的?)。这个问题可以用多线程解决吗?如果是这样,我需要多线程吗?有没有一种更简单的方法来显示我的表单/对话框并能够在我仍然尝试重新连接时与之交互(IE 将它拍成电影并用右上角的“X”关闭它)?

非常感谢。非常感谢您阅读这篇文章,并感谢这个社区。 :D

最佳答案

只是下面的一个例子,我将处理 catch 中的任何延续逻辑,并在 while 循环内跳出或继续。

安德鲁

while (!connected)
{
try
{
sock.Connect(authenServerEP);
connected = true;
establishingConnectionForm.Dispose();
}
catch (SocketException retryConnectException)
{
//Optional - add some wait time may be 5 seconds i.e. "trying again in 5 seconds"
//System.Threading.Thread.Sleep(5000);
//Here check the number of attempts and if exceeded:
if(numberOfTimes == 5)
{
break;
}
else
{
numberOfTimes++;
continue;
}
}
}

关于c# - 使用 C# 连接/重试连接的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905627/

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