socket 相关整理

2017-05-09 Java

Socket

一般分为 ServerSocketSocket两类,前者用于服务端,可以通过 accept 方法监听请求然后处理并返回 Socket;后者用于完成具体数据传输,客户端可直接使用 Socket 发起请求并传输数据。

ServerSocket 使用

try {
    ServerSocket serverSocket = new ServerSocket(6666);
    // The method blocks until a connection is made.
    Socket socket = serverSocket.accept();// accept 是阻塞方法,收到请求后程序才会继续进行
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String data = bufferedReader.readLine();
    System.out.println("get data:" + data);
    socket.getOutputStream();
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    bufferedWriter.write("hello," + data);
    bufferedWriter.close();
    bufferedReader.close();
    serverSocket.close();
} catch (IOException e) {
    e.printStackTrace();
}

Socket 使用

try {
    Socket socket = new Socket("127.0.0.1", 5200);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter write = new PrintWriter(socket.getOutputStream());
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String readline;
    readline = br.readLine();// 从系统标准输入读入一字符串
    while (!readline.equals("end")) {
        write.println(readline);
        write.flush();
        System.out.println("Client:" + readline);
        System.out.println("Server:" + in.readLine());
        readline = br.readLine(); // 从系统标准输入读入一字符串
    } // 继续循环
    write.close();
    in.close();
    socket.close();
} catch (Exception e) {
    System.out.println("can not listen to:" + e);// 出错,打印出错信息
}

NIO Socket

jdk1.4 开始增加 NIO 接口模式,对比旧接口的阻塞模式底层采用新的处理方式极大地增加了 IO 的效率。需要理解三个概念:BufferChannelSelector

ServerSocketChannel

SocketChannel

Search

    Post Directory