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

  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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort port1 = new SerialPort(); string InputData = String.Empty; delegate void SetTextCallback(string text); private void Port_Select() {//获取机器中的串口地址 string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } } private void Form1_Load_1(object sender, EventArgs e) { Port_Select(); this.comboBox1.SelectedIndex = 0; this.comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "关闭串口") //当要关闭串口的时候 { port1.DiscardOutBuffer(); port1.DiscardInBuffer(); port1.Close(); button1.Text = "打开串口"; label3.Text = "串口当前状况:未打开"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else if (button1.Text == "打开串口") //当要打开串口的时候 { try { port1.PortName = comboBox1.SelectedItem.ToString(); port1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem); port1.DataBits = 8; port1.RtsEnable = true; port1.Open(); port1.DiscardOutBuffer(); port1.DiscardInBuffer(); button1.Text = "关闭串口"; comboBox1.Enabled = false; comboBox2.Enabled = false; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + " 波特率:" + comboBox2.SelectedItem.ToString() + " 数据位:8 "; } catch { button1.Text = "打开串口"; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + "打开失败"; MessageBox.Show("该串口无法打开"); } } } 资源中部分代码
c是指计算机科学中的一种编程语言,它发展于20世纪70年代,在那个时候编程语言的发展进入了一个新的阶段。相比于其他编程语言,c具有高效、简洁和灵活的特点,因此在计算机科学领域广泛应用。 c语言的优点之一是它具备较高的执行效率,这是由于c语言的底层特性决定的。与高级语言相比,c语言更接近底层,可以直接控制硬件和内存,因此在编写需要高性能的程序时,c语言是一个理想的选择。 另一个优点是c语言具有简洁和灵活的语法。c语言的语法简洁明了,易于理解和学习,同时具备强大的功能。这使得c语言成为一种专业的编程语言,被广泛应用于系统级编程、嵌入式系统开发以及科学计算等领域。 同时,c语言还支持面向过程的编程范式,这使得程序的设计和实现更加直观和可控。c语言提供了丰富的语言元素和库函数,开发者可以根据需要进行自由组合,从而实现各种不同的功能和算法。 然而,c语言也存在一些缺点。首先,c语言的语法相对较为底层,需要程序员自行管理内存。这在一定程度上增加了程序的复杂性和难度,容易引发一些常见的错误,如内存泄漏和指针错误。 此外,c语言对开发者的能力要求较高,需要具备一定的计算机科学和编程经验。对于初学者来说,上手c语言可能需要一定的时间和精力。 总的来说,c语言是一种功能强大、高效、简洁和灵活的编程语言,被广泛应用于各个领域。使用c语言进行编程可以提高程序的性能和效率,同时还可以培养开发者的编程能力。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值