我正在尝试使用c#中的异步套接字将客户端连接到服务器。
我正在执行socket.beginconnect尝试连接,但要点是,如果未建立连接,我希望它尝试开始连接,并且如果在500毫秒内未建立连接,我想再次尝试可以说10次
我尝试了一个简单的泡,但是它无法工作,因为在上一个泡完成之前,我无法再次开始连接,但是当开始连接完成并且找不到服务器时,它将返回没有服务器的期望。
MSDN文档说:
若要取消对BeginConnect方法的挂起调用,请关闭Socket。在进行异步操作时调用Close方法时,将调用提供给BeginConnect方法的回调。后续对EndConnect方法的调用将引发ObjectDisposedException,以指示该操作已被取消。
因此,您每次必须创建一个新的Socket:
public Socket TryConnect(...)
{
Socket socket;
try
{
socket = new Socket(...);
var connect = Task.Factory.FromAsync(
socket.BeginConnect, socket.EndConnect, host, port, null);
var isConnected = connect.Wait(TimeSpan.FromSeconds(0.5));
if (!isConnected)
{
socket.Close();
return null;
}
return socket;
}
catch
{
if (socket != null)
{
socket.Dispose();
}
throw;
}
}
for (var i = 0; i < 10; i++)
{
var socket = TryConnect();
if (socket != null)
return socket;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句