Java socket笔记

  1. 概述

socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装,对用户来说,只要通过一组简单的API就可以实现网络的连接。

  1. socket基本示例(single thread)
    服务端
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public class ServerSocketTest {

public static void main(String[] args) {

try {

          // 初始化服务端socket并且绑定9999端口

            ServerSocket serverSocket  =new ServerSocket(9999);

            //等待客户端的连接

            Socket socket = serverSocket.accept();

            //获取输入流

            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));

            //读取一行数据

            String str = bufferedReader.readLine();

            //输出打印

            System.out.println(str);

        }catch (IOException e) {

          e.printStackTrace();

        }

}
}

客户端:

public static void main(String[] args) {

try {

            Socket socket =new Socket("127.0.0.1",9999);

            BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            String str="你好,这是我的第一个socket";

             bufferedWriter.write(str);

            //刷新输入流

            bufferedWriter.flush();

            //关闭socket的输出流

            socket.shutdownOutput();
        }catch (IOException e) {

            e.printStackTrace();

        }

}
  1. socket基本示例(multi-thread)
public static void main(String[] args)throws IOException {

// 初始化服务端socket并且绑定9999端口

        ServerSocket serverSocket =new ServerSocket(9999);

        //创建一个线程池

        ExecutorService executorService = Executors.newFixedThreadPool(100);

        while (true) {

//等待客户端的连接

            Socket socket = serverSocket.accept();

            Runnable runnable = () -> {

BufferedReader bufferedReader =null;

                try {

bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

                    //读取一行数据

                    String str;

                    //通过while循环不断读取信息,

                    while ((str = bufferedReader.readLine()) !=null) {

//输出打印

                        System.out.println("客户端说:" + str);

                    }

}catch (IOException e) {

e.printStackTrace();

                }

};

            executorService.submit(runnable);

        }

}

客户端:

public static void main(String[] args) {

try {

//初始化一个socket

            Socket socket =new Socket("127.0.0.1",9999);

            //通过socket获取字符流

            BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            //通过标准输入流获取字符流

            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(System.in,"UTF-8"));

          while (true){

String str = bufferedReader.readLine();

              bufferedWriter.write(str);

              bufferedWriter.write("
");

              bufferedWriter.flush();

          }

}catch (IOException e) {

e.printStackTrace();

        }

}
}
原文地址:https://www.cnblogs.com/francisforeverhappy/p/JavaSocketBlog.html