请教朋友:
怎么把一个Socket服务端的输出流结束(服务端与客户端双向通信问题),即避免客户端阻塞.
这种机制的原理我还不是很清楚(IO有一些原理我还不是很熟),我对shutdownInput()用法还不了解,怎么样让它置于流的结束.
怎么把一个Socket服务端的输出流结束(服务端与客户端双向通信问题),即避免客户端阻塞.
这种机制的原理我还不是很清楚(IO有一些原理我还不是很熟),我对shutdownInput()用法还不了解,怎么样让它置于流的结束.
解决方案 »
- 求助!个人作业,不知道怎么弄,求各位强人帮忙!
- 安装jre后,控制面板中没有java plug-in图标
- SWT-Desinger中的Swing Layout的werticle glue有什么用,怎么用?
- 关于javac的如果搜寻类的问题
- 关于使用JMF的问题,请各位高手帮忙!~
- InputStream 的read(byte[] d)方法读取内容出现重复读取,这是为什么?
- newInstance() 抛出异常的问题
- java 与 c 网络字节序问题
- 一个赋值空间的问题(希望,各路高手云集,来解决下这个问题)分不多,但是礼轻情谊重。
- JAVA求助,有关DES算法问题。
- 急求java火柴游戏参考程序
- 在一个vm里面,同一个类的static变量在什么情况下会出现不同的实例?
楼主【rocket_2008】截止到2008-06-26 09:31:22的历史汇总数据(不包括此帖):
发帖数:1 发帖分:5
结贴数:1 结贴分:5
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
1、我要源源不断的读取,也就是客户端与服务端的通讯
2、当我用字节读取的时候,不是可以用while((num = in.read(by)) != -1)这种情况么,当我们定义的by字节数组的长度的长度为1024,但当数据源的长度刚好为1024的倍数时,那么这样的情况是会阻塞的,这就是我要解决的问题。用一种比较好的办法来解决用字节数组的情况。
参考这个
shutdownOutput() 关闭相应的输出流, 不能再写数据,但还能读数据。
close() 关闭并释放Socket
可以看http://topic.csdn.net/u/20080626/09/18db2301-f672-4ec8-aaa8-bf8c75489893.html
SUN公司就是因为这样的结束流的方式不好处理,才让我们用包装流来解决.
我们用字节流来读取数据的时候,就因为返回不了-1这种情况需要做很多的判断,首先一点,连接是不能是短连接.
这样的问题有时候讨论可以看着是多余的,我其实不这么看,但有人告诉我他是这样的看法,既然是readLine()方法,就不必用read()方法.
但是原理我们还是要知道.
流的结束如果不是文件的话是不以-1结尾的,所以不可能返回-1,所以当没有关闭连接时或没有调用shutdownInput()方法时是一直阻塞的.
我想过用什么办法从服务端写一个-1过来,但是事实告诉我这种方法是很行不通的.
有两种方案来结束流:
1\让客服端自己来判断流是束结束(根据读取的信息)
2\从服务端告诉客服端一个信息
在第一种方法中,有一个问题(或者说我们自己制造的一个问题):
byte [] by = new byte[1024];
while((num = in.read(by)) != -1){
if(num < by.length){//当读取的数据的长度小于by的长度时,认为读到了末尾了.
//do something
break;
}
}这里的问题是我们能不能判断出数据的长度刚好了by数组长度的倍数的情况呢.
为是解决这个办法,应可能的用包装流来读写,好处是速度快,方便.