如何配置套接字连接超时

当客户端尝试连接到断开的IP地址时,超时时间超过15秒…我们如何减少此超时时间?什么是配置方法?

我用来建立套接字连接的代码如下:

try

{

m_clientSocket = new Socket(

AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(serverIp);

int iPortNo = System.Convert.ToInt16(serverPort);

IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);

m_clientSocket.Connect(ipEnd);

if (m_clientSocket.Connected)

{

lb_connectStatus.Text = "Connection Established";

WaitForServerData();

}

}

catch (SocketException se)

{

lb_connectStatus.Text = "Connection Failed";

MessageBox.Show(se.Message);

}

回答:

我通过使用Socket.ConnectAsync方法而不是Socket.Connect方法解决了该问题。调用Socket.ConnectAsync(SocketAsyncEventArgs)后,启动计时器(timer_connection),如果时间到了,请检查套接字连接是否已连接(if(m_clientSocket.Connected)),如果没有,则弹出超时错误。

private void connect(string ipAdd,string port)

{

try

{

SocketAsyncEventArgs e=new SocketAsyncEventArgs();

m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(serverIp);

int iPortNo = System.Convert.ToInt16(serverPort);

IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);

//m_clientSocket.

e.RemoteEndPoint = ipEnd;

e.UserToken = m_clientSocket;

e.Completed+=new EventHandler<SocketAsyncEventArgs>(e_Completed);

m_clientSocket.ConnectAsync(e);

if (timer_connection != null)

{

timer_connection.Dispose();

}

else

{

timer_connection = new Timer();

}

timer_connection.Interval = 2000;

timer_connection.Tick+=new EventHandler(timer_connection_Tick);

timer_connection.Start();

}

catch (SocketException se)

{

lb_connectStatus.Text = "Connection Failed";

MessageBox.Show(se.Message);

}

}

private void e_Completed(object sender,SocketAsyncEventArgs e)

{

lb_connectStatus.Text = "Connection Established";

WaitForServerData();

}

private void timer_connection_Tick(object sender, EventArgs e)

{

if (!m_clientSocket.Connected)

{

MessageBox.Show("Connection Timeout");

//m_clientSocket = null;

timer_connection.Stop();

}

}

以上是 如何配置套接字连接超时 的全部内容, 来源链接: utcz.com/qa/422952.html

回到顶部