您的位置:首页 > 编程语言 > Java开发

java socket编程

2015-11-03 10:12 337 查看
参考地址:http://my.oschina.net/u/1156660/blog/291079

进行java socket编程时发现,PrintStream(会自动刷写数据)往套接字里面写数据,对方可以接收;而用OutputStreamWriter往套接字里面写数据,对方是用BufferedReader读的却接受不到,一直阻塞。

服务器端代码:

public static void main(String[] args) throws IOException{

ServerSocket ss = new ServerSocket(10000);

Socket s = ss.accept();

//往套接字里面写数据

PrintStream ps = new PrintStream(s.getOutputStream());-------------------------------(1)

ps.println("你好");------------------------------------------------------------------------------------(2)

//读取客户端发过来的数据

BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

System.out.println("客户端:" + br.readLine());

br.close();

ps.close();

ss.close();

}

客户端代码:

public static void main(String[] args) throws IOException{

Socket s = new Socket("127.0.0.1" , 10000);
//读取客户端发过来的数据

BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

System.out.println("服务器端:" + br.readLine());
//往套接字里面写数据

PrintStream ps = new PrintStream(s.getOutputStream());-----------------------------(1)

ps.println("你好");---------------------------------------------------------------------------------(2)

ps.close();
br.close();

s.close();
}
上述代码是没有问题的,能够正常相互接收。
但当我将(1)(2)代码改写成
OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());

BufferedWriter bw = new BufferedWriter(osw);

bw.write("你好");

bw.flush();

此时服务器端和客户端就接收不了数据了,一直在br.readLine()阻塞

解决方法:bw.write("你好" + "\n")就可以了

注:TCP数据的操作建议使用DataInputStream和DataoutputStream
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: