C# 检测远端端口UDP监听状态

之前项目需要检测远端状态,起初尝试通过检测远端端口来实现,后方发现项目不适用改用其它方便,这里发出了给有需要的人。
原理:发送UDP报文到指定端口,如果该端口没有绑定UDP监听会反馈ICMP,有绑定则无返回。
实现流程,打开ICMP监听,给远端的端口发送UDP报文,如果收到ICMP反馈,说明该端口没有UDP监听,未收到反馈说明该端口有UDP检测(不考虑网络异常等特殊情况)。
代码附上
string _localIP = “192.1.3.125”;//本地IP
string _serverIP = “192.1.3.221”;//远端IP

main()
{
        Thread thr = new Thread(IcmpListener);
        thr.Start();//启动icmp监听
        UdpCheck(5081); //发送udp包
}


private void UdpCheck( int port)
    {
        UdpClient udpclient = new UdpClient(11066);
        udpclient.Connect(IPAddress.Parse(_serverIP), port);
        udpclient.Send(new byte[2], 2);  //向指定端口发udp包

    }

    public void IcmpListener()
    {
        while(true)
        {
            Socket icmpListener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            icmpListener.Bind(new IPEndPoint(IPAddres
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
是的,C#可以同时监听多个UDP端口并接收数据。你可以创建多个UdpClient对象来监听不同的端口,并使用异步接收方法BeginReceive和EndReceive来接收数据。以下是一个简单的示例代码: ``` using System; using System.Net; using System.Net.Sockets; class Program { static void Main(string[] args) { // 监听端口列表 int[] ports = { 1234, 5678, 9012 }; // 创建多个UdpClient对象并绑定到不同的端口 UdpClient[] clients = new UdpClient[ports.Length]; for (int i = 0; i < ports.Length; i++) { clients[i] = new UdpClient(ports[i]); } Console.WriteLine("正在监听端口:{0}", string.Join(", ", ports)); // 异步接收数据 foreach (UdpClient client in clients) { client.BeginReceive(new AsyncCallback(ReceiveCallback), client); } Console.ReadLine(); } static void ReceiveCallback(IAsyncResult ar) { UdpClient client = (UdpClient)ar.AsyncState; IPEndPoint remoteEP = null; byte[] data = client.EndReceive(ar, ref remoteEP); Console.WriteLine("收到来自 {0} 的数据:{1}", remoteEP, Encoding.UTF8.GetString(data)); // 继续异步接收数据 client.BeginReceive(new AsyncCallback(ReceiveCallback), client); } } ``` 在这个例子中,我们创建了一个包含三个UDP端口的列表,并使用循环创建了三个UdpClient对象来监听这三个端口。然后,我们使用异步接收方法BeginReceive和EndReceive来接收数据,并在回调方法ReceiveCallback中处理接收到的数据。在回调方法中,我们继续异步接收数据以便能够持续监听多个端口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值