您的位置:首页 > 理论基础 > 计算机网络

关于在网络中如何收发xml格式流的一种C#程序方法

2013-12-13 14:35 399 查看
              初学C#感觉知识欠缺,就用博客的形式将一些知识点保存下来,便于以后查阅,有错误望指正.

             关于如何通过在网络中发送xml文件流,每种编程语言都有自己的实现方法,而且方法还不止一种。正好最近在用C#写一个简单的小型数据存取服务器,用到了这个。

            <?xml version="1.0" encoding="UTF-8"?>

               <root>

                    <common>

                        <project_id>01</project_id>

                        <gateway_id>01</gateway_id>

                        <type>notify</type>

                   </common>

                  <heart_beat operation="notify"/>

              </root>

           首先,这个文件是由下位机发送过来的,需要将里面各个元素的值保存的类中;

           这里先定义三个 类 public class common_class                              public  class heart_breat_class                   public class recvFromClient

                                             {   public string project_id;                                      {    [xmlAttribute("operation")]                        { public  common_class common;

                                                 public string gateway_id;                                          public string operation;                              public  heart_breat_class heart_breat;

                                                 public string type;                                                        public heart_breat_class()       
c282
               public  recvFromClient()

                                                 public common_class()                                             { operation="";}                                            { common = new common_class();

                                                 {project_id="";gateway_id="";type="";}                                                                                                heart_breat = new  heart_breat_class();}

            这里肯定要用到XmlSerializer类来序列化xml文件,,忘了,,要声明recvFromClient可以序列化

           XmlSerializer heart_beat_xml = new XmlSerializer(typeof(recvFromClient));

           recvFromClient    recv    =    new recvFromClient();

            recv  = (recvFromClient)heart_beat_xml.Deserialize(ms);

            //这里ms是从网络中的读取到到xml文件存储内存流的一个实例

            经过一个反序列化的过程,xml文件元素的值就存储到了相应类的成员中;

           <?xml version="1.0" encoding="utf-8"?>

              <root>

                     <common>

                        <project_id />

                        <pateway_id />

                        <type>heart_result</type>

                   </common>

                   <id_validate operation="heart_result">

                       <heart_result>0000</heart_result>

                  </id_validate>

            </root>

           上位机要发送这样一个文件给下位机作为成功接收 到网络心跳包的回应。

            这里根元素有两个子元素,我们定义两个类;common类还用上面的类,

           在定义一个 public class id_validate_classs {                                                                                                  [Serializable]

                                                                                                            [xmlAttribute("operation")]                                    [XmlRoot("root")]

                                                                                                            public string operation ;                                       public class heartBeatToClient

                                                                                                             public string heart_result;                                    {    public common_class common;

                                                                                                             public id_validate_class()                                         public id_validate_class id_validate;

                                                                                                            {operation = "":  heart_result="";}                                public heartBeatToClient()

                                                                                           }                                                                                                        {operation = "";heart_result = "";}

                                     XmlSerializer heart_to_client = new XmlSerializer(typeof(heartBeatToClient));

                                    heartBeatToClient myHeartBeatToClient = new heartBeatToClient();

                                    myHeartBeatToClient.common.project_id = myHeartBeatFromClient.common.project_id;

                                    myHeartBeatToClient.common.gateway_id = myHeartBeatFromClient.common.gateway_id;

                                    myHeartBeatToClient.common.type ="heart_result";

                                    myHeartBeatToClient.id_validate.operation = "heart_result";

                                    myHeartBeatToClient.id_validate.heart_result = "0000";

                                    string strToSend;

                                    strToSend = XMLSerialClassToString(myHeartBeatToClient);//用流发送的时候不接受类作为参数的.所以需要将这个类转变为流

                                    byte[] strToSd = Encoding.UTF8.GetBytes(strToSend);

                                    networkStream.Write(strToSd, 0, strToSd.Length); //通过netwrokSteam绑定的套接字发送出去;

                 string XMLSerialClassToString(heartBeatToClient    t   )

                 {

                             XmlSerializerNamespaces xml=new XmlSerializerNamespaces();

                             xml.add("","");//命名空间和浅醉我们都不需要,这里指定为空,不要编译器会默认加上命名空间和前缀

                             MemorySream ms =new MemoryStream();

                              StreamWriter sw=new StreamWriter(ms,Encoding.UTF8);

                              XmlSerializer xs=new XmlSerlialliaer(typeof(heartBeatToClient));

                             xs.Serialier(sw,t,xml);

                               return  Encoding.UTF8.Getstring(ms.toArray());

                  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  学习笔记 C#
相关文章推荐