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

当接收的类使用的是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()刷新。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值