用JAVA做CS结构程序,现在的问题是我通讯方式使用XML方式来通讯.在客户端直接读一个XML发送到服务端, 发送没有问题我在SERVER端使用 read() 一个一个字节的收发现全部收到所有数据.但现在的问题是,我如何知道现在XML文件全部发送完了呢? 我自己不想去做这个解析. 如果使用一些现成的工具如xmlbean直接从输入端口读的话,也不会结束退出.有什么好的办法吗? 难道还要回到我原来C++的原始方式,定义一个数据包,先定义一个长度,然后再收到这个长度为止? 那使用XML通讯还有意义吗? 不知道表达的是否清楚.
解决方案 »
- jsp中写了一个登陆,但是“用户名”和“密码”等中文都成了乱码
- 要求实现接口java.util.Set,元素和hash code无关
- 看似简单,又有点捉摸不透的split方法,如果你还是在用1.4之前的方法就别进来了
- 关于测试webwork的一个小问题,希望大家帮忙
- 如何判断一个字符串是不是空值?
- 怎么给弹出菜单的菜单项加上背景颜色、背景图片、图标啊?
- int intin = System.in.read(b);怎么来计算intin的值?
- 在applet中如何使用keypress事件.
- 关于程序中执行sql语句,数据库oracle,错误代码ora:00923,怎么解决,再线等待
- 怎样把一个String写入数据库的大文本字段(Memo)?
- 一个看简单的,但比较棘手的问题,请大家帮忙,谢谢!
- 两种布局方式的分别
然后用ObjectOutputStream把这个对象写出到流里面
那边就用ObjectInputStream把这个对象从流里面读出来就可以了
这样就可以把一些数据全部封装在一个对象里面,
不过要记住,你的这个类一定要实现Serializable这个接口,否则会报错,串行化不了
这个接口是一个空接口,只要声明实现就可以了
祝你成功
http://community.csdn.net/Expert/topic/5017/5017669.xml?temp=.5808527再次谢谢大家的帮助.
--->>
没办法,网络传输就该定义数据包或界限。
你要想编程简单点,就一次连接只传送一个文件好了。
<<---因为我的程序要做成长连接的.所以不能一次发送一个文件.具体原因比较复杂.
你说的:定义数据包的界限,我现在就是想知道XML文件传输时,有没有一些标准或者现成的一些成熟通用的做法,比如像HTTP中有CONTENT-LENGTH.就是说你们以前用长连接发送XML文件,是怎么定义的?
我用SAX和DOM都试过直接从 InputStream 来解析XML文件,但我一个XML文件发送完的时候,都会一直在等侍 parse(InputStream) 上面,解析都没有问题,关键问题在传输上,我现在是写一个 0x0 做为结束,先使用
input.read(data,0, datalen) 收取数据,直到收取到 '0' 结束的串为止.这只是一个临时方法,因为用XML就是为了通用,加一个\0我还不如改回以前定义数据包结构的方式.
==============>>
将Socket的stream直接给解析器使用,当然不会自动中止,除非流已经结束。
要避免异常,需要设置通信超时socket.setSoTimeout(30000); 超时无数据传输自动退出
<<===========非常感谢你的回复和关注,你上面说的我也知道,设置超时的方法是肯定不行的,因为这样发送一个数据包要等30秒才能收到回应,响应太慢了.我现在就是想知道XML在SOCKETS中的通讯协议有没有:
1.现成的一些成熟工具来封装;
2.一些XML的标准规定;
3.目前通用的做法.因为用XML就是为了通用.
通用的做法是把xml当文件操作,基于一些已有的传输协议,如http对于流方式解析xml,可以考虑用StAX。
有一个东西不懂,想问一下WebService 可以做为长连接吗?
不过没有特别好的方法
就是定义一个类似MAp的对象,把所有的数据放入里面
然后编程流输入输出
有完整的代码
JM.NET下面的就是~具体参看http://community.csdn.net/Expert/topic/5016/5016927.xml?temp=.2009088
那样的话用axis包吧。
就很容易被理解!
你只要把传输XML看做传输普通的文件就可以了,所以你完全可以自己定义数据包,比如结尾加'\0',或者定义传输长度,或者干脆使用http作为传输协议,这就是通用的做法!还有,为什么非要长时间保持连接呢?这很消耗资源的!
给你具体解释XML在你的程序中的用途!
客户端和服务器之间传送短信,必须定义个协议,比如"接收号码,内容","13814018186,你好",采用这种格式,你知道是什么意思,但是别人就不容易理解了,如果格式比较复杂,就更不容易理解!
采用xml,就很容易理解,比如
<sms>
<tel>13814018186</tel>
<content>你好</content>
</sms>
这就是xml的用途!
比如 woaiwanghuan(我不学习是猪) 解释的那样
或者找xml通讯类了 ,apache组织有很多。
但是注意,这只有2个字节。如果你发送的文件超过了64KB,那么最好还是自己用这种方式定义一下。每次发送数据之前,先发送一下字符串的长度值,然后再发送字符串。
另外注意,在发送这个整数值的时候,需要做一下转换,因为本机字节序和网络字节序也许不同。当然,Java中是否相同我没有实际测试过。
产品也是这样的,无论什么通讯都要有协议的,只要是协议一般就都有开始和结尾标记!
如果什么都没有,根本就没法通讯!
没象楼主在这里和大家讨论的这么深,就是直接只传送xml,这样行么?我也长见识了
就可以发送和接收XML文件.
至于使用长连接?
你的理解错了,你这样做光看连接,性能是提高了,但系统的整体性能反而降低了。
得不偿失啊。题外话..........