定义了一个结构
        struct tagMonitorMessage
        {
            public ulong m_message_length;
            char[] key;
            char m_system;
            char m_command;
            char[] monitor_content;
            char[] reserver;
        }
        
       用UDP传输这个结构的信息,应该怎样改下面的代码?
        发送端
        private void button1_Click(object sender, EventArgs e)
        {
            tagMonitorMessage mm = new tagMonitorMessage();
            mm.m_message_length = 1223112;            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPAddress broadcast = IPAddress.Parse(this.textBox2.Text.ToString());
            byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(this.textBox1.Text.ToString());
            IPEndPoint ep = new IPEndPoint(broadcast, 11000);
            s.SendTo(sendbuf, ep);
        }        接收端
         private void StartListener()
        {
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
            try
            {
                while (!done)
                {
                    byte[] bytes = listener.Receive(ref groupEP);
                    string strIP;
                    strIP = "信息来源" + groupEP.Address.ToString();
                    string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length);
                    MessageBox.Show(strInfo, strIP);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                listener.Close();
            }
        }

解决方案 »

  1.   


        [Serializable]
        public struct tagMonitorMessage
        {
            public ulong m_message_length;
            public char[] key;
            public char m_system;
            public char m_command;
            public char[] monitor_content;
            public char[] reserver;        public static byte[] Serialize(object obj)
            {
                BinaryFormatter bf = new BinaryFormatter();
                MemoryStream stream = new MemoryStream();
                bf.Serialize(stream, obj);
                byte[] datas = stream.ToArray();
                stream.Dispose();
                return datas;
            }        public static object Deserialize(byte[] datas)
            {
                BinaryFormatter bf = new BinaryFormatter();
                MemoryStream stream = new MemoryStream(datas);
                object obj = bf.Deserialize(stream);
                stream.Dispose();
                return obj;
            }
        }
    发送端 private void button1_Click(object sender, EventArgs e) 
            { 
                tagMonitorMessage mm = new tagMonitorMessage(); 
                mm.m_message_length = 1223112;             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
                IPAddress broadcast = IPAddress.Parse(this.textBox2.Text.ToString()); 
                //byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(this.textBox1.Text.ToString());
                byte[] sendbuf = tagMonitorMessage.Serialize(mm);
                IPEndPoint ep = new IPEndPoint(broadcast, 11000); 
                s.SendTo(sendbuf, ep); 
            } 
     接收端 private void StartListener() 
            { 
                UdpClient listener = new UdpClient(listenPort); 
                IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); 
                try 
                { 
                    while (!done) 
                    { 
                        byte[] bytes = listener.Receive(ref groupEP); 
                        string strIP; 
                        strIP = "信息来源" + groupEP.Address.ToString(); 
                        tagMonitorMessage mm = tagMonitorMessage.Deserialize(bytes);
                        MessageBox.Show(mm.ToString(), strIP); 
                    } 
                } 
                catch (Exception e) 
                { 
                    Console.WriteLine(e.ToString()); 
                } 
                finally 
                { 
                    listener.Close(); 
                } 
            }