c/s架构 怎么用socket操作xml 发送和接收,求方法和实例。

解决方案 »

  1.   

    xml是文件还是啥?先序列化为byte[],然后使用Socket.Send()或异步方法。
      

  2.   

    发送XML和发送其它的数据应该没有区别吧
      

  3.   

    Socket中发送XML文件Dim   SendSocket   As   New   Socket(AddressFamily.InterNetwork,   SocketType.Stream,   ProtocolType.Tcp)   
    Dim   ipendpoint   As   New   IPEndPoint(Net.IPAddress.Parse("192.168.0.8"),   8888)       '指定IP和PORT   
    Dim   fs   As   New   IO.FileStream("c:\p.XML",   FileMode.OpenOrCreate,   IO.FileAccess.Read)   
    '将来传输的文件进行流处理   
    Dim   fssize(fs.Length   -   1)   As   Byte   
    '设置要传输的文件大小   
    Dim   strread   As   New   IO.BinaryReader(fs)   '流处理要传输的文件   
    strread.Read(fssize,   0,   fssize.Length   -   1)   
    '将流处理过的要发送的文件读入到fssize中   
    SendSocket.Connect(ipendpoint)   
    SendSocket.Send(fssize)   
    Label2.Text   =   fs.Length   '显示文件大小   
    fs.Close()   
    SendSocket.Shutdown(SocketShutdown.Send)   
    SendSocket.Close()   
      

  4.   


    <?xml version="1.0" encoding="GB2312"?>
    <gz>
    <main>
    <rebufnum>123456789</rebufnum>
    <iso>
    <nobuf>asdfghj</nobuf>
    <nobuf>asdfghj</nobuf>
    <!--.....
    ....
    ....
    ....-->
    <nobuf>asdfghj</nobuf>
    </iso>
    </main>
    </gz>
      

  5.   


    我要对p.XML 插值 怎么处理?
      

  6.   

    以配置文件为例
    XML操作:
    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load("c:\p.XML");
    设置节点信息:
    /// <summary>
            /// 设置配置信息
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void SetKeyValue(string key, string value)
            {
                XmlNode xmlNode;
                XmlElement xElem;
                xmlNode = XmlDoc.SelectSingleNode("//appSettings");
                if (xmlNode != null)
                {
                    xElem = (XmlElement)xmlNode.SelectSingleNode("//add[@key=\"" + key + "\"]");
                    if (xElem != null)
                    {
                        xElem.SetAttribute("value", value);                    XmlDoc.Save(fileName);
                    }
                }
            } /// <summary>
            /// 读取配置信息
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public string ReadConfigValue(string key)
            {
                XmlNode xmlNode;
                XmlElement xElem;            xmlNode = XmlDoc.SelectSingleNode("//appSettings");
                if (xmlNode == null)
                {
                    return "";
                }
                xElem = (XmlElement)xmlNode.SelectSingleNode("//add[@key=\"" + key + "\"]");
                if (xElem == null)
                {
                    return "";
                }
                return xElem.GetAttribute("value");
            }插入节点:
    XmlNode xmlNode = XmlDoc.CreateNode(XmlNodeType.Element,"ele","ddd");
                xmlNode.InnerText = "aaa";
                //在这里改变xmlNode的其他属性
                XmlDoc.AppendChild(xmlNode);至于传输,XML本来就是字符串,不需要再序列化什么的,直接把字符串转换成byte[]传给Socket就可以了
    转换方法(xmltext是读取的xml字符串):
    这里以UTF8编码为例
    byte[] bs = System.Text.Encoding.UTF8.GetBytes(xmltext);Socket接收后在转成字符串(data是结束的byte[]类型):
    string xmltext = System.Text.Encoding.UTF8.GetString(data);
      

  7.   

       public static string UpLoadFile(string filePath, string hostURL, string userKey,Hashtable headerKey)
            {
                string result = "";
                System.Net.WebClient WebClientObj = new System.Net.WebClient();
                //添加用户令牌
                WebClientObj.Headers.Add("UserKey", userKey);
                //附件参数
                if (headerKey != null)
                {
                    foreach (string key in headerKey.Keys)
                    {
                        WebClientObj.Headers.Add(key, headerKey[key].ToString());
                    }
                }
                FileStream fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                BinaryReader bReader = new BinaryReader(fStream);
                long length = fStream.Length;
                byte[] data = new byte[Convert.ToInt64(length)]; 
     
                bReader.Read(data, 0, Convert.ToInt32(length));
                try
                {
                    byte[] byRemoteInfo = WebClientObj.UploadData(hostURL, "POST", data);                
                    string sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);
                    result = sRemoteInfo;
     
                }
                
                catch (Exception ex)
                {
                   
                    
                    throw ex;
                }
                finally
                {
                    bReader.Close();
                    fStream.Close();
                }            WebClientObj = null;
                GC.Collect();            return result;
            }
      

  8.   

    就把它当成普通文件,进行发送就行了啊。发送过程中管它是XML还是什么东西呢?!你接收到之后处理时再进行解析它。
      

  9.   

    XML  Extensible Markup Language的缩写,即可扩展标记语言。是一种您可以用来创建自己的标记的标记语言。它由万维网协会(W3C)创建,用来克服 HTML的局限。