JAVA中Sockets长连接时使用read()阻塞的问题!急救!
这个问题纠结了我一天了,怎么也没有解决。希望谁能帮帮我!
就是从服务端接收数据,客户端向服务度发送数据,然后服务端返回一条语句可以正常接收;
代码:
datas = new String(datas.getBytes("GB2312"),"8859_1");
dos.writeBytes(datas);
byte[] buf = new byte[512];
InputStream inputStream = socket.getInputStream();
int ret = inputStream.read(buf);
strRecvData = new String(buf, "GB2312").trim();
但当服务端返回多条数据时,如服务端处理客户端发来的数据,处理2s后发送返回给客户端,inputStream.read(buf);就直接阻塞无响应了。查了很多方法,比如写入一个循环中和单独的线程中。仍然无法实现。代码如下:
while (true) {
try {
byte buff[] = new byte[500];// 缓冲数组
if (buff != null && buff.length > 0) {
inputStream.read(buff);
String str = new String(buf, "GB2312").trim();// 接受客户端发送的数据包
catch (IOException ioe) {
System.out.println("读写异常:"+ioe.getMessage());
}
}
还有这种方法,代码如下:
byte[] buf = new byte[512];
int n=0;
while( (n=inputStream.read(buf)) != -1 ) {
//处理buf里的数据
//卡死无响应,不会执行
}
但无论怎样,只要执行inputStream.read(),inputStream.read(buff),就会卡死,阻塞无响应。。即使服务端已经发送完毕了,还是无响应,卡死。
现在有两个疑问,纠结着我:
1:如果服务端没有关闭输出流,一直给我发送数据,这时客户端接收使用inputStream.read()函数,是不是会一直阻塞,直到服务端数据全部发送完毕?
2:问题出在哪里啊?代码怎么修改才可以读取到服务端数据,服务端发过来多少数据,我就能接收读取多少数据?
求解!我真想哭了。。。。