双方采用tcp/ip进行通讯,如果采用winsock的方式,对于对方发过来的数据包,我可以直接在dataarrive事件中通过getdata方法捕获。然后对捕获的内容进行解析,这种方法根本无须知道要传过来的包有多长,有什么特殊字符。
那么java中如何实现这种方式呢???
举个例子:也就是说对方发送了一个消息,但是接收方并不知道消息的字节数,那么这种情况下如何完整的捕获消息呢???因为java中的输入流InputStream或者是BufferReader、InputStreamReader只能循环等待,但不知道等待到什么时候才是满足条件的???
那么java中如何实现这种方式呢???
举个例子:也就是说对方发送了一个消息,但是接收方并不知道消息的字节数,那么这种情况下如何完整的捕获消息呢???因为java中的输入流InputStream或者是BufferReader、InputStreamReader只能循环等待,但不知道等待到什么时候才是满足条件的???
解决方案 »
- java链表遍历耗时问题
- 关于实例,对象
- 菜鸟诚心向大家请教有关构造对象时发生的问题,都进来看看,帮帮忙,多谢啦!!!
- FutureTask的用法问题
- 求java.io.EOFException的解决办法
- 有关JAVA读取不同格式文档的问题,请各位大虾进来给小弟点建议。来者都有分!!!!
- 关于classLoader getResourceAsStream的一个问题 急需解决
- 考察一下java程序员的思路。 进来有分
- 哪里有Jbuiler9.0的使用手册可以下载啊(免费的电子书籍)!请各位帮忙.
- 关于封闭类的内类,如何访问另一个类中的实例。
- java swing 中如何将所画的椭圆加粗显示?
- 时间格式转换问题
这样就好办多了。
如果不是这样的话, 很简单,循环读到返回值为-1,或为null.
while((..read)!=-1)
{
...
}但是,如果接受了socket连接,这个方法一直是处于阻塞状态吧?除非连接断开,否则这个方法一直在运行
gzgzgzgz gzgzgzgz gzgzgzgzgzgzgzgzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgz
gzgzgz gzgz gzgzgz gzgzgzgz
gzgzgz gzgz gzgzgzgzgzgzgzgzgz
gzgzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgzgz gzgz gzgzgz
gzgzgzgzgzgz gzgzgzgzgzgzgz
java和.net还是有些差别的,如果你要是介意IO的同步,你可以看一下java的NIO.
当对方写入的数据被读尽后,read()返回-1,退出while().
对方的socket(我想应该是服务端),不是你们自己开发的吗?
如果是你们自己开发的,最好定义好消息的格式以及相关的信息。“关键问题是这个read()方法并不知道什么时候读尽。因为socket连接还在,所以这个read()方法会一直在阻塞,除非是连接断开,否则read()方法不会是-1.”
这种模式是网络通讯的标准模式,需要通讯一直保持。另楼主可以测试下,在空闲状态,是否会有消息过来,忘记细节了。可以换以字节方式接收试试。
有一个方法,通过InputStream的available方法来探测buffer中是否有发过来的数据包,如果有则把buffer中的数据读出来,buffer继续阻塞等待。
所以我现在明白了为什么在进行socket通讯时一般要求是消息阻塞,也就是说只有收到结果后才能发送下一次消息。