zoukankan      html  css  js  c++  java
  • Java Socket 使用BufferedWriter和BufferedReader要注意readLine 以及换行标志的发送

    当接收的类使用的是BufferedReader,发送的类是BufferedWriter的时候,要注意发送的一行要有换行标识符。

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

    服务器:

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * Created by 290248126 on 14-5-10.
     */
    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("你好,我是客户端!
    ");

    或者:

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

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

    另外,客户端程序的正常调用socket.close()之后,服务器的readLine会读取到null,由此判断客户端断开连接。如果直接停止客户端程序,服务器会得到异常:Connection reset

  • 相关阅读:
    mysql----show slave status G 说明
    mysqldump 的方式来搭建master-->slave 的复制架构
    C++----练习--string 从文件中一个一个单词的读直到文件尾
    python 全排列combinations和permutations函数
    什么是restful api
    git知识点
    Hash算法解决冲突的方法
    python之单例设计模式
    Linux常用命令大全
    SQLAlchemy中时间格式化及将时间戳转成对应时间的方法-mysql
  • 原文地址:https://www.cnblogs.com/wuyou/p/3720626.html
Copyright © 2011-2022 走看看