//用于控制进程等待
private static ManualResetEvent socketReset = new ManualResetEvent(true);
//暂时使用的超时时间的设定 单位:秒
public static int overTimes = 2;
#region 判断socket状态
/// <summary>
/// 在超时时间内判断连接是否存在或通畅
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
public static bool IsConnect(string ip, int port)
{
//重置等待变量
socketReset.Reset();
//准备参数
bool connected = false;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = null;
IPAddress.TryParse(ip, out ipAddress);
//获取ipe
IPEndPoint iep = new IPEndPoint(ipAddress, port);
//尝试请求
socket.BeginConnect(ipAddress, port, new AsyncCallback(ConnCallback), socket);
//等待尝试请求
socketReset.WaitOne(overTimes * 1000);
connected = socket.Connected;
socket.Close();
return connected;
}
/// <summary>
/// Connect的回调函数
/// </summary>
/// <param name="result"></param>
private static void ConnCallback(IAsyncResult result)
{
try
{
Socket socketAsync = result.AsyncState as Socket;
if (socketAsync != null)
{
//开始连接
socketAsync.EndConnect(result);
//连接成功,提前结束等待
socketReset.Set();
}
}
catch (Exception ex)
{
//连接失败
}
}
#endregion
验证socket能否连接
最新推荐文章于 2022-05-08 13:03:53 发布