如何判断远程的主机是否存在?
我现在用的是用
try
socket.connect
catch
的方法
但是这个方法到出错要17秒左右,没有时间等啊。
以前用C++有直接判断的方法。
C#内要如何做?
3、同步方式中减少断网时connect函数的阻塞时间
同步方式中的断网时connect的阻塞时间为20秒左右,可采用gethostbyaddr事先判断到服务主机的路径是否是通的,或者先ping一下对方主机的IP地址。
A、采用gethostbyaddr阻塞时间不管成功与否为4秒左右。
例子:
LONG lPort=3024;
struct sockaddr_in ServerHostAddr;//服务主机地址
ServerHostAddr.sin_family=AF_INET;
ServerHostAddr.sin_port=::htons(u_short(lPort));
ServerHostAddr.sin_addr.s_addr=::inet_addr("192.168.1.3");
HOSTENT* pResult=gethostbyaddr((const char *) &
(ServerHostAddr.sin_addr.s_addr),4,AF_INET);
if(NULL==pResult)
{
int nErrorCode=WSAGetLastError();
TRACE("gethostbyaddr errorcode=%d",nErrorCode);
}
else
{
TRACE("gethostbyaddr %s\n",pResult->h_name);;
}
B、采用PING方式时间约2秒左右
暂略
问题点数:0、回复次数:7Top
1 楼dreamchild(梦小孩)回复于 2005-06-04 16:27:06 得分 0
ddddTop
2 楼hedonister(冰戈)回复于 2005-06-04 17:47:25 得分 0
如果是http验证,就向代理发个request,看看有没有反应!
HttpWebRequest objHttpRequest;
HttpWebResponse objResponse;
WebProxy objProxy;
objHttpRequest=(HttpWebRequest)WebRequest.Create(m_strUrl);
objHttpRequest.Timeout=3000;
objHttpRequest.AllowAutoRedirect=true;
objHttpRequest.ContentType="application/x-www-form-Urlencoded";
objProxy=new WebProxy(ProxyName,PortID);
objProxy.BypassProxyOnLocal=true;
objProxy.Credentials=new NetworkCredential(UserID,Pwd,Domain);
objHttpRequest.Proxy=objProxy;
try
{
objResponse=(HttpWebResponse)objHttpRequest.GetResponse();
}
catch(Exception e)
{
throw e;
}Top
3 楼hedonister(冰戈)回复于 2005-06-04 17:48:14 得分 0
不好意思好象发错了,你参考一下吧Top
4 楼YYKXQ(异域狂想曲)回复于 2005-06-04 20:30:11 得分 0
第一题:
你可以把连接的响应时间设置小一点就不用等那么久了Top
5 楼zhzuo(秋枫)回复于 2005-06-04 23:37:22 得分 0
调用telnet判断结果,
http://www.cnblogs.com/jiezhi/articles/87412.htmlTop
6 楼dreamchild(梦小孩)回复于 2005-06-05 00:15:05 得分 0
第一题:
你可以把连接的响应时间设置小一点就不用等那么久了
但是要如何设响应时间?
有SendTimeout及receivetimeout 没有connecttimeoutTop
7 楼dreamchild(梦小孩)回复于 2005-06-07 21:53:08 得分 0
dingTop




