日期:2014-05-20  浏览次数:20808 次

关于socket跨语言对象传输的问题。这问题一直找不到解决办法。希望各位高手给我指点一下
本帖最后由 listenx5 于 2013-03-23 01:07:52 编辑
这是我在学习socket的时候遇到的问题。

要实现的功能是在客户端把一个对象传到服务器。

客户端用c#做。服务器用java做。

要传输的对象只有两个属性:一个userName 跟一个password  都是String类型。
两端都这个User类。内容一样。


实践时的流程是这样的:我在c#那边把对象序列化为xml字符串后通过socket发送到java这边。

java这边接收到xml字符串后 赋值给一个String变量,然后把变量给xstream的fromXml方法进行反序列化。
就在进行反序列化的时候抛异常了。
异常的大概内容好像是说我的xml字符串内容不能转为对象。

重点:
后来我直接把java这边接收到的xml字符串用system.out.println()在控制台输出,
然后把在控制台输出的xml字符串手工复制到xstream的fromXml方法里再执行却成功了。


问题出在哪里了?


有人跟我说过  在接收端这边接收到xml字符串之后自己用dom4j解析xml字符串内容再自己封装到接收端这边
的对象里。不要直接用xstream的fromXml。

但是我发现c#和java两边把对象序列化为xml字符串后xml字符串的内容是一样的。
这样的话c#这边发送的xml字符串应该是可以给java那边的xstream的fromXml进行反序列化的,
没必要自己手动去解析和封装。但是就出现上面说的问题。。。  郁闷~~~~


还有  用socket进行跨语言的对象传输 , 大家一般用的是什么办法?

接收端需要手动解析封装的吗?
如果大家有这方面的资料也请分享一下。




java 序列化 xstream socket xml

------解决方案--------------------
这种问题没有通解,要根据具体的实际需求分析,因地制宜才好!
按照你说的可以考虑WebService,这个比较适合你;
你也可以使用xml作为中间数据表示层在网络上进行交换,两边各自进行orm映射,比如jaxb等!
如果你交换的数据就是这么简单,而且也没有通用性的设计要求,那就直接拼接成一个定长报文更简单,更高效!