Socket编程--客户端InputStream数据读取
2016-12-04 18:03
134 查看
问题描述:用java编写一个客户端程序连接指定的IP和端口,一直收不到目标地址返回数据。
运行下面的代码收不到返回数据:(这段代码应该写在一个线程里)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
System.out.println("接收服务器反馈: " );
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = br.readLine())!= null) {
buffer.append(line);
}
br.close();
System.out.println(buffer.toString());
运行下面的代码可以接收到返回数据:
InputStream is=socket.getInputStream();
byte b[]=new byte[1024];
is.read(b);
System.out.println(new String(b));
原因分析:
readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。
readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。
运行下面的代码收不到返回数据:(这段代码应该写在一个线程里)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
System.out.println("接收服务器反馈: " );
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = br.readLine())!= null) {
buffer.append(line);
}
br.close();
System.out.println(buffer.toString());
运行下面的代码可以接收到返回数据:
InputStream is=socket.getInputStream();
byte b[]=new byte[1024];
is.read(b);
System.out.println(new String(b));
原因分析:
readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。
readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。
相关文章推荐
- 网络socket编程(2)---客户端
- C# Socket编程完成控制台服务器端和web客户端(调试通过)
- 客户端SOCKET 编程
- linux 客户端 Socket 非阻塞connect编程(源码)
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- 实例解析SOCKET编程模型-客户端
- linux 客户端 Socket 非阻塞connect编程(正文)
- c# WINFORM SOCKET编程-简单聊天程序(客户端)
- Boost socket 同步编程示例(服务端,客户端)
- 六、Socket编程(服务器与客户端一对一通信)
- ftp客户端源代码,使用VC+SOCKET编程,在SERV-U6.0服务器上测试通过,能断点续传
- socket编程之---------获取客户端主机名和IP地址
- Socket编程服务器和客户端(多个客户端可以同时连接一个服务器的同一端口)
- 一个最基本的socket客户端编程
- Java网络编程从入门到精通(16):客户端套接字(Socket)的超时
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- VC++ Socket编程 简单的Tcp/ip客户端
- 请教:C#网络编程相关的知识,建立socket服务器时向客户端连接,就建立不了了?
- linux 客户端 Socket 非阻塞connect编程
- VC++中Socket编程的实现---【TCP客户端】