目的是:不同平台、不同语言之间的数据交换与应用集成(C++、Java),客户程序中动态生成的数据以XML格式编码,通过Socket传送到服务器端,服务器端读取此数据流后进行相应的解码处理,重组得到相应的数据后进行相关处理。关键之处:将XML数据转换成Socket流,从Socket流中解码出XML数据。请不要告诉我说先保存为文件后再进行处理,如此将多出来不必要的io操作。曾考虑过XML-RPC以及SOAP,但对这两者感觉都不好,在我的问题域中。所以才想通过自己编写Socket方案来解决所遇到的问题。如有更好方案or建议,请不吝赐教

解决方案 »

  1.   

    全套用Axis引擎就很好,我用过的。
    C++和Java之间就可以互相调用函数了。挺不错的。如果自己要传递XML只是作为文本的话,那就简单了。
      

  2.   

    server端和client端如果都是java好办,用jdom把xml序列化了再传,如果一段是java一端是c++麻烦了,只能把xml当文本字符串传,对端再重新解析
      

  3.   

    ajax 拼一个xml标准形式的字符串,
     var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
            oHttpReq.open( "POST" ,  url , false );
            oHttpReq.onreadystatechange=function()
            {
              if( oHttpReq == null )
              return;
              if (oHttpReq.readyState==4)
              {
                if(oHttpReq.status==200)
                {
                     result = oHttpReq.responseText;
                     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                     xmlDoc.async=false;
                     
                     xmlDoc.loadXML(result);
                     这是获得返回的xml字符串
                
                                  }
                
             
          }
        }
         oHttpReq.setRequestHeader("Content-type", "text/xml");
         oHttpReq.send(sendValue);
         发送你拼好的字符串
      

  4.   

    你既然有xml了,直接当文本传就是了。
    关键是你要在客户端和服务器端定一个传输协议。
      

  5.   

    <?xml version="1.0" encoding="UTF-8" ?> 
       <webmethod id="service_order_to_cp">
       <userid value="13246410019"/>
       <encryptflag value="N"/>
       <serviceid value="3168"/>
       <ispack value="N"/>
       <sub_type value="moth"/>
       <orderdate value="2006-08-30 15:49:45" />
      </webmethod>
    把你要传的值放到相应的value值里面写输出流就可以了.具体的TAG可以随便定以的.
      

  6.   

    [Fatal Error] :1:102: The processing instruction target matching "[xX][mM][lL]"
    is not allowed.
    org.xml.sax.SAXParseException: The processing instruction target matching "[xX][
    mM][lL]" is not allowed.
            at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.
    java:264)
            at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Doc
    umentBuilderImpl.java:292)
            at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:98)
            at TCPServer.main(TCPServer.java:29)
    来自服务端的异常The processing instruction target matching "[xX][mM][lL]" is not
     allowed.
    现在出现上述的异常,该如何解决?
      

  7.   

    刚好在做这个。由于Server端是多种语言编写的系统,所以传输符合XML格式的文本。这种比较简单。不懂Axis,有没有达人介绍一下。
      

  8.   

    很不理解??你说的不就是XML-RPC吗??
      

  9.   

    >关键之处:将XML数据转换成Socket流,从Socket流中解码出XML数据。
    XML数据本来就是文本, 文本写入到流直接使用XML Document对象即可>请不要告诉我说先保存为文件后再进行处理,如此将多出来不必要的io操作。
    不用文本用内存也行, 如果使用DOM处理, 需要占用相当内存, 如果你的数据量不大, 使用DOM树存储临时数据没有问题. 如果数据量大, 就不能用DOM只能使用写文件或直接写socket流方式>曾考虑过XML-RPC以及SOAP,但对这两者感觉都不好,在我的问题域中。所以才想通过自己编写Socket方案来解决所遇到的问题。
    用XML-RPC/SOAP和自己写本质是一样, SOAP更加通用, 自己写速度可能会更快写>如有更好方案or建议,请不吝赐教
    虽然文件你不想用, 但如果数据量大, 通信条件不好的情况下, 使用临时文件是一个很好的解决方案