C#中Socket的连接超时设置中,SendTimeout,ReceiveTimeout根本不起作用。开始本来准备通过c#中ping命令去判断服务器连接是否正常的,但是同样存在问题。如果服务器正常运作,而socket服务程序意外终止,那么客户端依然会认为socket服务程序连接正常,从而建立连接。这样连接一个已经终止的socket服务程序,导致可能需要等待10~20秒钟才能返回结果。极大的降低了用户体验效果。为此找到了以下方法解决这一问题。以下代码可能并不完美,比如如果在客户端连接成功后,网络突然中断,同样会造成客户端连接请求等待。希望有更好解决方法者,予以指教!
private readonly ManualResetEvent TimeoutObject = new ManualResetEvent(false);
/// <summary>
/// 连接超时设置
/// </summary>
/// <param name="remoteEndPoint">ip</param>
/// <param name="timeoutMSec">超时时间</param>
/// <returns></returns>
public bool SocketConnect(IPEndPoint remoteEndPoint, int timeout)
{
bool is_ok = false;
TimeoutObject.Reset();
var socket = new Socket(AddressFa