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();

}


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

java bufferedread的作用和用法

public class BufferedReaderextends Reader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。  可以指定缓冲区的大小,或者可使用...
  • rylq56m9
  • rylq56m9
  • 2013年07月20日 21:25
  • 1798

BufferedWrite和BufferedRead的用法。

普通用法(五中写入和两种读取): package cn.zll.demo;import java.io.BufferedReader; import java.io.BufferedWriter; i...
  • zllww123
  • zllww123
  • 2017年09月21日 12:54
  • 140

关于socket的几个问题

主要说的是几个转换函数 网络字节与本地字节的相互转化二进制ip与十进制ip的转换ip地址与主机名的转化 1.socket类型 socket:linux中的网络编程是用socket接口...
  • zzyoucan
  • zzyoucan
  • 2013年06月25日 19:35
  • 1486

SOCKET通信中多线程编程的性能优化问题

SOCKET网络编程,多线程场景下的性能表现与参数选择
  • success_by_choice
  • success_by_choice
  • 2017年04月12日 16:19
  • 419

网络通信之Socket小结

最近在写一个关于数据通信系列的文章,所以Socket是少不了的,今天就和大家来简单分享下Socket的使用方式,以及关于Socket的几个比较重要,容易被小伙伴们忽略且常用的方法, 好了,进入今天的...
  • mythace
  • mythace
  • 2016年08月24日 22:34
  • 371

socket编程中常见问题--《一》

1) 在socket有自动重连机制的时候,如果在一个线程中实现socket错误或断线自动重连时,注意将socket设置为非阻塞的,不然当程序退出时,线程可能阻塞在connect函数,造成程序不能及时退...
  • smilestone322
  • smilestone322
  • 2013年02月28日 21:04
  • 1508

使用socket函数的一些常见错误

原文地址:使用socket函数的一些常见错误1.socketSOCKET socket( int af, int type, int protocol ); af:常为AF_INET 使用AF_IS...
  • ming1205
  • ming1205
  • 2015年08月20日 14:45
  • 6115

在多个网卡的机器上利用socket进行网络测试的问题

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=program&Number=641137&fpart=all 用的是...
  • sourthstar
  • sourthstar
  • 2012年09月07日 10:31
  • 1522

网络--- socket读写操作

socket阻塞模式:执行 tcp的读写函数recv()、send()
  • jinhao_csdb
  • jinhao_csdb
  • 2014年06月21日 12:57
  • 1247

浅谈用java搭建web服务器之Socket编程——更好的理解Apache、Tomcat等软件的工作模式

之前做web应用一直是在本地装个Apache、Tomcat之类的软件,然后把做好的网页文件放在他们的工作目录下(如Apache的htdocs),然后打开浏览器输入127.0.0.1或localhost...
  • icodeyou
  • icodeyou
  • 2014年10月18日 21:00
  • 5217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BufferedRead @ BuferedWrite 在Socket中的问题
举报原因:
原因补充:

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