??C/S架構的程式,運行程序中需要呼叫其它系統提供的WebService介面,但是在個別用戶電腦上運行時就會報無法訪問網站的錯誤,
??如果人去檢測錯誤,通常先看網路通不通,然后再檢查是否能正常訪問WebService(可以在IE上輸入WebService地址,檢查是否能正常訪問,如下圖示例所示)

??如果IE無法顯示上圖所示的WebService資訊,一般就是用戶無法訪問服務器或者是服務器埠的訪問權限沒有開,可以在用戶計算機中用telnet命令檢查是否能正常訪問服務器埠,如下所示,如果能正常訪問埠,則輸入telnet命令后會進入telnet控制臺,否則就會報無法打開到主機連接的錯誤,這時就需要開通用戶計算機對服務器埠的訪問權限,



??上述方式需要到用戶現場去做除錯,費時費力,最好是能通程序式自動檢測的方式檢查服務器埠是否打開,這樣,用戶客戶端使用出錯時,可以通程序式自動判斷是否能訪問服務器埠,如果不能,則提供用戶進行相關的操作(例如申請權限等),
??通過百度資料,目前C#中主要可以通過Socket、TcpClient等方式檢測指定計算機埠是否打開,代碼比較簡單,就直接貼在下面(代碼參考自參考文獻1-4),
private void TcpClientCheck(string ip, int port)
{
IPAddress ipa = IPAddress.Parse(ip);
IPEndPoint point = new IPEndPoint(ipa, port);
TcpClient tcp = null;
try
{
tcp = new TcpClient();
tcp.Connect(point);
MessageBox.Show("埠打開");
}
catch (Exception ex)
{
MessageBox.Show("計算機埠檢測失敗,錯誤訊息為:"+ex.Message);
}
finally
{
if(tcp!=null)
{
tcp.Close();
}
}
}
private void SocketCheck(string ip, int port)
{
Socket sock = null;
try
{
IPAddress ipa = IPAddress.Parse(ip);
IPEndPoint point = new IPEndPoint(ipa, port);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(point);
MessageBox.Show("埠打開");
}
catch (SocketException ex)
{
MessageBox.Show("計算機埠檢測失敗,錯誤訊息為:" + ex.Message);
}
finally
{
if (sock != null)
{
sock.Close();
sock.Dispose();
}
}
}
??最后寫了個小程式作為示例,界面如下所示,代碼放在了GitHub上面,地址為https://github.com/guochao2299/PortTest:


參考文獻:
[1]https://www.cnblogs.com/tudou990/p/10312554.html
[2]https://www.jb51.net/article/62640.htm
[3]https://www.mzwu.com/article.asp?id=4579
[4]https://blog.csdn.net/sinat_25185707/article/details/82467588
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242385.html
標籤:其他
上一篇:二戰結束
