当前位置:  开发笔记 > 编程语言 > 正文

如何在任何端口上侦听广播包?

如何解决《如何在任何端口上侦听广播包?》经验,为你挑选了1个好方法。

使用.NET,如何在任何端口上监听发送到.255的udp广播数据包,而无需绑定到特定端口?



1> Mephisztoe..:

我自己找到了一种方法.这是它的工作原理:

mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
mainSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0));
mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);                           

byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
byte[] byOut = new byte[4] { 1, 0, 0, 0 }; 

// Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant of Winsock 2
    byTrue,
    byOut);

//Start receiving the packets asynchronously
mainSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null);

在异步处理程序中,我执行一个mainSocket.EndReceive(...),解析数据并在需要时启动一个新的BeginReceive(从多线程接收器外部控制).

奇迹般有效.积分转到Hitesh Sharma(http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有