这个问题纠结了我一天了,怎么也没有解决。希望谁能帮帮我!
就是从服务端接收数据,客户端向服务度发送数据,然后服务端返回一条语句可以正常接收;
代码:
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:问题出在哪里啊?代码怎么修改才可以读取到服务端数据,服务端发过来多少数据,我就能接收读取多少数据?求解!我真想哭了。socketsjava
就是从服务端接收数据,客户端向服务度发送数据,然后服务端返回一条语句可以正常接收;
代码:
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:问题出在哪里啊?代码怎么修改才可以读取到服务端数据,服务端发过来多少数据,我就能接收读取多少数据?求解!我真想哭了。socketsjava
解决方案 »
- 谁有 脏话 数据库,用于网页过滤的。请给我一份,万分感谢~
- 讨论eclipse和jbuilder的优缺点,大家请进畅所欲言。
- 中文参数的传递
- java环境变量的意思(菜鸟问题)
- 关于继承的几点困惑
- 怎么屏蔽JDialog的关闭按钮,既对话框右上角的X
- 谁能给我一个关于FileDialog的例子,谢谢了..在线等待(有分!~)
- 有没有人讨论value object模式
- 关于tomcat
- 请问在java里怎么读用c写在文件里的数据结构,来着给份
- 大神请进,如下日志输出场景能否通过log4j的配置搞定
- 求大神用java实现CRC-16校验,输入 AB 12 BC 3D 输出AB 12 BC 3D 31 14这种格式。
read()也一直阻塞着。。
我想服务端一边给发送着数据,我一边读取着数据,这应该怎么实现呢?应该用什么方法呢
mina之类的框架使用在Android开发下也是可以的吗?因为程序写在Android程序里的。
怎么才能做到一直监听中,发过来多少数据,我收到多少数据。
服务端read完的时候判断是否接收到了结束标签,或者接收的字符串结尾是否是结束标签<end>
如果是<end>则代表服务端接收参数结束。就不要继续read了,跳出read往下执行直接根据参数执行逻辑
最后返回结果,关闭服务端输入流和输出流。
不知道你明白了吗 千万不要用 read是否返回-1或者==null去判断,在java的socket是阻塞的,是会有问题的
当然了,不过客户端和服务端都是java写的,我觉得就没必要这么传输,用readLine最方便,也不用考虑buffer大小。