udpClient广播后无法接受数据了

.Net技术 码拜 9年前 (2015-03-26) 1152次浏览 0个评论
 

用udp发送广播255.255.255.255到端口10000,然后局域网中的设备就会反回一个数据包到发送时的端口,由于不同的udpclient不能绑定同一个端口,所以我用了同一个udpClient发送和接收数据,但是却无法接受数据,数据是发送了的,我用网路岗抓包看到了的。

public partial class search_tool : Form
    {
        //取随机端口
        static Random rd = new Random();
        static int port = rd.Next(10300,50300);
        public Thread receiveDUPMessageThread;
        UdpClient udpClient = new UdpClient(port);

        public search_tool()
        {
            InitializeComponent();
        }

       

        //搜索摄像机
        private void buttonSearchCamera_Click(object sender, EventArgs e)
        {
            //发送搜索摄像机包
            byte[] searchCameraMessage = { 0,0,0,1 };
            sendUDPMessageByMultipleWithByte(0,searchCameraMessage);
        }

        //发数据
        public void sendUDPMessageNoPort(Byte[] message)
        {
            try
            {
                udpClient.Connect(IPAddress.Parse("255.255.255.255"), 10000);
                udpClient.Send(message, message.Length);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }


        //拼2个字节数组
        public byte[] combain2ByteArray(byte[] a, byte[] b)
        {
            byte[] c = new byte[a.Length+b.Length];

            a.CopyTo(c, 0);
            b.CopyTo(c, a.Length);
            return c;
        }

        //传入操作码和正文,发送UDP数据包
        public void sendUDPMessageByMultipleWithByte(short operateCodeShort,byte[] cententMessage)
        {
            byte[] head = System.Text.Encoding.ASCII.GetBytes("MO_I");
            byte[] operteCode = BitConverter.GetBytes(operateCodeShort);
            byte[] baoLiu1 = { 0x00 };
            byte[] baoliu2 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
            int messageLengthInt = cententMessage.Length;
            byte[] messageLength = BitConverter.GetBytes(messageLengthInt);
            byte[] baoliu3 = { 0x00, 0x00, 0x00, 0x00 };

            byte[] a1 = combain2ByteArray(head, operteCode);
            byte[] a2 = combain2ByteArray(a1, baoLiu1);
            byte[] a3 = combain2ByteArray(a2, baoliu2);
            byte[] a4 = combain2ByteArray(a3, messageLength);
            byte[] a5 = combain2ByteArray(a4, baoliu3);
            byte[] message = combain2ByteArray(a5, cententMessage);
            sendUDPMessageNoPort(message);
        }

        //监听函数
        public void receiveUDPMessage()
        {
            while (true)
            {
                try
                {
                    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any,0);
                    Byte[] receiveByte = udpClient.Receive(ref RemoteIpEndPoint);
                    string returnData = Encoding.ASCII.GetString(receiveByte);
                    MessageBox.Show("Message" + returnData);
                    MessageBox.Show("This message was sent from" + RemoteIpEndPoint.Address.ToString() + " on their port number " + RemoteIpEndPoint.Port.ToString());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }

        private void search_tool_Load(object sender, EventArgs e)
        {
            receiveDUPMessageThread = new Thread(new ThreadStart(receiveUDPMessage));
            receiveDUPMessageThread.Start();
        }

        private void search_tool_FormClosing(object sender, FormClosingEventArgs e)
        {
            udpClient.Close();
            receiveDUPMessageThread.Abort();
        }
udpClient广播后无法接受数据了
30分
也可能是ARP病毒导致交换机的MAC地址表混乱造成,
udpClient广播后无法接受数据了
引用 1 楼 stonespace 的回复:

也可能是ARP病毒导致交换机的MAC地址表混乱造成,

网络病毒没有 因为我只是重写了一个软件 那个软件正常工作 应该是我代码的问题,但我是刚学c#,找不到问题

udpClient广播后无法接受数据了
你有抓发送回来的包吗?还有防火墙是否设置好?
这些原因都可能影响你的接收,建议去查查看。
如果有回传包而不显示,那就是程序本身的问题,看看是不是解析错误。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明udpClient广播后无法接受数据了
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!