Java Socket 使用BufferedWriter和BufferedReader要注意readLine 以及换行标志

来源:互联网 发布:二叉树的遍历 java 编辑:程序博客网 时间:2024/05/17 09:38

当接收的类使用的是BufferedReader,发送的类是BufferedWriter的时候,要注意发送的一行要有换行标识符,否则读取不到消息。

请看下面一个例子,服务器接收不到客户端的信息。

服务器:

import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class Server {    public static void main(String[] args) throws Exception {  ServerSocket serverSocket = new ServerSocket(8088);  Socket socket = serverSocket.accept();  System.out.println("一个客户端连接了");  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  System.out.println("客户端:" + bufferedReader.readLine());  Thread.sleep(100000);  socket.close();  serverSocket.close();    }}


客户端:

import java.io.*;import java.net.ServerSocket;import java.net.Socket;/** * Created by 290248126 on 14-5-10. */public class Client {  public static void main(String[] args) throws Exception {    Socket socket = new Socket("localhost",8088);    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));    bufferedWriter.write("你好,我是客户端!");    bufferedWriter.flush();    System.out.println("我们已经发送出去");    Thread.sleep(100000);    socket.close();  }}

在上面的客户端中,write的时候并没有发送换行标识符,因此服务器在接收的时候,readLine是读取一行,没遇到换行就读取不出来。

因此服务器接收不到客户端的信息。

解决方案方法如下:

只需要修改客户端部分:

bufferedWriter.write("你好,我是客户端!\n");

或者:

bufferedWriter.write("你好,我是客户端!");bufferedWriter.newLine();

使用bufferedWriter的newLine()方法。 
记得发送过去的时候要调用flush()刷新。



0 0
原创粉丝点击