C#程序检测指定计算机端口是否打开

  C/S架构的程序,运行过程中需要调用其它系统提供的WebService接口。但是在个别用户电脑上运行时就会报无法访问网站的错误。
  如果人去检测错误,通常先看网络通不通,然后再检查是否能正常访问WebService(可以在IE上输入WebService地址,检查是否能正常访问,如下图示例所示)
C#程序检测指定计算机端口是否打开_第1张图片
  如果IE无法显示上图所示的WebService信息,一般就是用户无法访问服务器或者是服务器端口的访问权限没有开。可以在用户计算机中用telnet命令检查是否能正常访问服务器端口,如下所示。如果能正常访问端口,则输入telnet命令后会进入telnet控制台,否则就会报无法打开到主机连接的错误,这时就需要开通用户计算机对服务器端口的访问权限。
在这里插入图片描述C#程序检测指定计算机端口是否打开_第2张图片在这里插入图片描述
  上述方式需要到用户现场去做调试,费时费力。最好是能通过程序自动检测的方式检查服务器端口是否打开。这样,用户客户端使用出错时,可以通过程序自动判断是否能访问服务器端口,如果不能,则提供用户进行相关的操作(例如申请权限等)。
  通过百度资料,目前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:
C#程序检测指定计算机端口是否打开_第3张图片
C#程序检测指定计算机端口是否打开_第4张图片
参考文献:
[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

你可能感兴趣的:(程序问题解答,C#,端口,打开)