注意细节:

  1、accept()方法是阻塞的,它的作用是等待客户端连接,如果连接成功会返回一个socket对象

  2、客户端创建对象并连接服务器,此时是通过三次握手协议保证跟服务器之间的连接

  3、对于客户端,它是往外写数据,所以是输出流

  4、read()方法也是阻塞的

  5、在关流的时候,会有一个往服务器写结束标记的动作,read()方法通过这个结束标记完成执行

  6、最后一步断开连接时,通过4次挥手协议保证连接终止

public class SocketDemo {

    public static void main(String[] args) throws IOException {
        // 创建一个客户端
        Socket socket = new Socket("127.0.0.1", 10000);

        // 获得一个输出字节流
        OutputStream outputStream = socket.getOutputStream();

        // 写数据
        outputStream.write("嗨,我是客户端。。。".getBytes());

        // 释放资源
        socket.close();
        outputStream.close();

    }
}
public class ServerSocketDemo {

    public static void main(String[] args) throws IOException {
        // 1、创建一个接收端
        ServerSocket serverSocket = new ServerSocket(10000);

        // 2、等待客户端连接,如果没有客户端连接,它会一直死等,进入阻塞状态。
        System.out.println("等待客户端连接。。。。。。。。。。。。。。。");
        Socket socket = serverSocket.accept();
        System.out.println("客户端连接成功!");

        // 3、获得一个输入流
        InputStream inputStream = socket.getInputStream();

        // 4、接收数据
        int len;
        byte[] bytes = new byte[1024];
        while ((len = inputStream.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, bytes.length));
        }

        // 5、释放资源
        inputStream.close();
        serverSocket.close();
    }
}