- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个小游戏客户端,它最终会连接到服务器以收集有关可用游戏、有多少玩家正在玩以及您可以想象它应该做的各种其他事情的一些信息。
我的困难在于找到一种有效的方法来处理首次加载时的连接/重试连接序列。
我想象我的客户在尝试连接时会遵循这个过程:
我一直在质疑我尝试遵循这个顺序的方法。我质疑这是否是正确/最有效的连接方式,以及为什么我在第 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/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!