BufferedRead @ BuferedWrite 在Socket中的问题

原创 2015年11月19日 01:45:41

研究Socket编程的时候,想提高传输的效率因此次采用BufferedWrite 与BufferedReader ,完成客户端与服务器端的编程服务器端用。

客户端用Eclipse 中使用ServerSocket实现,客户端使用Android ,

核心代码如下:

serverSocket  = new ServerSocket(port); //绑定端口号
Socket socket = serverSocket.accept();//监听接收连接
System.out.println("客户端连接成功!!!!!!!");
//获取输入流并将其包装成具有缓冲作用的包装流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//输出流
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//读取接收的信息
String in_info = in.readLine()+System.getProperty("line.separator");
System.out.println(in_info);
String out_info = "Goodbye from port "+port;
out.write(out_info+"\n");
out.flush();
socket.close();

测试时能连接成功,但是无法接受数据,

上面的java Socket通信用到了BufferedReader的readLine()方法和BufferedWriter的write()方法。

注意readLine()方法,通过查看JDK中关于此方法的注释可知,它是读取一行数据,这行数据的末尾必须有换行符标识符说明到此为止是一行。不然readLine()方法无法顺利读取。

所以在服务器端或客户端进行输出的时候必须输出换行标识(\n),让对方可以顺利读取一行。因此可以这样写writer.write("hello world\n")。为了更好地使用java的跨平台特性,BufferedWriter提供了一个newLine()方法,该方法就是专门输出一个换行符。所以也可以这样写writer.write("hello world");writer.newLine();

另外既然是BufferedWriter,自然用到了缓冲,当你输出的字符长度不超过缓冲区时,可能不会被输出,这时候程序也无法正常运行。所以要用writer.flush();刷新缓冲区。也就是说writer.write("我接收到你的数据:"+input);writer.newLine();writer.flush();必须一起使用,它们总是同时出现,因此你可以自定义一个方法,包含这三个方法。

public void writeLine(String msg){

writer.write(msg);
writer.newLine();
writer.flush();

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Socket的问题.doc

  • 2013年08月21日 10:49
  • 62KB
  • 下载

socket04---流协议和粘包问题及解决

首先来说说什么是流协议和粘包问题:之前我们写的那几篇都是基于TCP传输协议的socket通信,而我们知道TCP传输数据是基于STREAM流的,什么意思呢?这么说吧,TCP在传输数据的时候,是不区分边界...

socket问题,在vc6.0编译就不报错

  • 2010年04月27日 15:46
  • 5.39MB
  • 下载

Debian NTP对时socket占用的问题

  • 2013年12月09日 16:23
  • 77KB
  • 下载

java和C#之间SOCKET通信的问题

java和C#之间SOCKET通信的问题   作者 Gavin_dinggengjia,火龙果软件    发布于 2013-10-30   ...

SOCKET三大通讯问题

  • 2013年03月12日 15:33
  • 7KB
  • 下载

[JAVA]Socket中BufferedReader.readLine()的阻塞特性导致的数据无法多次发送的问题

我在写一个Socket服务器时,使用了BufferedReader.readLine()的方法来读取消息,客户端用BufferedWriter.write()来写数据,但是注意到我发送的是"FFi"这...

关于socket flush()目标端接收不到数据,close()可以接收到数据的问题

最近在写一个简单的socket示例时遇到一个问题,使用write.flush()目标端read接收不到数据,调用close()后数据可正常接收。这让我很是费解,记得当初学习flush方法时,都说明这个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BufferedRead @ BuferedWrite 在Socket中的问题
举报原因:
原因补充:

(最多只允许输入30个字)