bufferedreader 和bufferedwriter

今天在写java socket编程server和client进行数据传输时突然遇到了一个问题:


在server.java时,创建了两个输入输出流:

      DataInputStream fromclient=new DataInputStream(socket.getInputStream());
    DataOutputStream toclient=new DataOutputStream(socket.getOutputStream());

    然后等待接收客户端发来的信息,并将信息传回给客户端:

   int message=fromclient.read();   //读取客户端的信息
   toclient.write(message+2);  //将信息传回

在client.java时,同样创建两个输入输出流:

    fromserver=new DataInputStream(socket.getInputStream());
    toserver=new DataOutputStream(socket.getOutputStream());

   然后向服务器发送数据,并接受客户端传来的信息:

    toserver.write(Integer.parseInt(message));
    int area=fromserver.read();

     此时,客户端和服务器都能正确的接收到发送的数据。


     但是,当把输入输出流换成文本传输模式的输入输出流时,传输就会出现问题:

在server.java时,创建了两个输入输出流:

    BufferedReader  serverreader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    BufferedWriter serverwriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    同样接受客户端的数据:    String message=serverreader.readLine(); 

在client.java时,同样创建两个输入输出流:

    clientreader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    clientwriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    然后向服务器发送数据,

    String message=jtf.getText();   //从文本框中获得输入的字符串

    clientwriter.write(message);    //写到缓冲区
    clientwriter.flush();   //发送给服务器

    在运行程序时,却发现,服务器得不到message。

后来经过查资料发现:

在写socket时候,用DataInputStream 怎样都行,但是使用了装饰着模式用了BufferedReader之后就出现了问题,是因为在readLine()时,只有在遇到\r \n的时候才会有返回值,修改后就能过得到数据了。



 

你可能感兴趣的:(java语言,bufferedreader,buff)