求助!我用C#写一个Socket客户端程序,在尝试连接服务器端的时候,如何避免如果服务器端不在线使得客户端Connect操作一直处于等待状态使得程序停滞不前的问题呢?我尝试了把Socket设定为非阻塞状态,但如果服务器端不在线就会报错“无法立即完成一个非阻挡性套接字操作”,请问各位如何解决客户端在尝试连接服务器端时,如果服务器不在线的话能及时发现并处理的问题呢?总不能每次执行到Socket.Connect时就一直停滞不前吧?关键代码如下
IPAddress serverIPAddress = IPAddress.Parse("192.168.0.42");
IPEndPoint serverIP = new IPEndPoint(serverIPAddress, 7777);
Socket skserver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
Console.WriteLine("Waiting for connection……");
skserver.Blocking = false;//设定为非阻塞状态
skserver.Connect(serverIP);
Console.WriteLine("Connection accepted.");
}
catch (Exception se)
{
Console.WriteLine("连接错误:" + se.Message);
}
这时如果服务器不在线,就报错:
连接错误:无法立即完成一个非阻挡性套接字操作。
System.IO.IOException:不允许对非阻止套接字执行此操作。
IPAddress serverIPAddress = IPAddress.Parse("192.168.0.42");
IPEndPoint serverIP = new IPEndPoint(serverIPAddress, 7777);
Socket skserver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
Console.WriteLine("Waiting for connection……");
skserver.Blocking = false;//设定为非阻塞状态
skserver.Connect(serverIP);
Console.WriteLine("Connection accepted.");
}
catch (Exception se)
{
Console.WriteLine("连接错误:" + se.Message);
}
这时如果服务器不在线,就报错:
连接错误:无法立即完成一个非阻挡性套接字操作。
System.IO.IOException:不允许对非阻止套接字执行此操作。
{
messType = messageType;
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化SOCKET
//socket.Bind(localEP);//绑定网络地址
ConnectEventArgs = new SocketAsyncEventArgs();//异步连接
ConnectEventArgs.RemoteEndPoint = new DnsEndPoint(SvIP, Sport);//设定和Server的通讯地址和端口
ConnectEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnSocketConnectCompleted);//连接完成后做出OnSocketConnectCompleted报告。
socket.ConnectAsync(ConnectEventArgs);//开始异步连接
} //完成连接的处理函数
void OnSocketConnectCompleted(object sender, SocketAsyncEventArgs e)
{
try
{
Socket clientSk = sender as Socket;
if (e.SocketError == SocketError.Success)
{
//写你的逻辑代码
}
}
catch (Exception ex) { AppClass.WriteFile(ex.ToString()); }
}