Java基础学习 | TCP实现简单的C/S通信

TCP客户端TCPClient

通过java.net.Socket类创建客户端对象
官方文档介绍:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
构造方法:
Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
成员方法:
OutputStream getOutputStream() 返回此套接字的输出流。
InputStream getInputStream() 返回此套接字的输入流。

使用步骤

  1. 创建Socket对象,通过构造方法指定服务器主机名和端口;
  2. 通过Socket对象的getOutputStream()获取套接字的输出流OutputStream对象;
  3. 通过OutputStream对象的write方法向服务器发送数据;
  4. 使用Socket对象的getInputStream()获取套接字的输入流InputStream对象;
  5. 通过InputStream对象的read方法读取服务器回发的数据;
  6. 释放资源(socket.close()) 关闭套接字。

代码实现

public static void main(String[] args) throws IOException {

        // 1. 创建Socket对象,通过构造方法指定服务器主机名和端口
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2. 通过Socket对象的getOutputStream()获取套接字的输出流OutputStream对象
        OutputStream os = socket.getOutputStream();

        // 3. 通过OutputStream对象的write方法向服务器发送数据
        os.write("请求连接1".getBytes());

        // 5.使用Socket对象的getInputStream()获取套接字的输入流InputStream对象
        InputStream is = socket.getInputStream();

        // 6. 通过InputStream对象的read方法读取服务器回发的数据
        byte[] bytes = new byte[32];
        int len = is.read(bytes);  // len表示获取有效的字节数
        System.out.println(new String(bytes, 0, len));

        // 7. 释放资源(socket.close())  关闭套接字
        socket.close();
    }

注意

服务器需要先启动后,再启动客户端,否则会抛出异常
java.net.ConnectException: Connection refused: connect


异常截图.png

TCP服务端TCPServer

通过java.net.ServerSocket类来创建服务器对象
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
构造方法:
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
成员方法:
Socket accept() 侦听并接受到此套接字的连接。(服务器类没有Socket类,需求方法获取客户端的Socket对象)

使用步骤

  1. 创建ServerSocket对象,通过构造方法指定客户端连接端口
  2. 通过accept方法获取客户端的Socket对象
  3. 通过Socket对象的getInputStream()获取套接字的输出流InputStream对象
  4. 通过InputStream对象的read方法读取客户端发送的数据
  5. 通过Socket对象的getOutputStream()获取套接字的输出流OutputStream对象
  6. 通过OutputStream对象的write方法向客户端发送数据
  7. 释放资源,关闭套接字

代码实现

public static void main(String[] args) throws IOException {
        // 1. 创建ServerSocket对象,通过构造方法指定客户端连接端口
        ServerSocket serverSocket = new ServerSocket(8888);
        // 2. 通过accept方法获取客户端的Socket对象
        Socket socket = serverSocket.accept();
        // 3. 通过Socket对象的getInputStream()获取套接字的输出流InputStream对象
        InputStream is = socket.getInputStream();
        // 4. 通过InputStream对象的read方法读取客户端发送的数据
        byte[] bytes = new byte[32];
        int len = is.read(bytes);
        System.out.println(new String(bytes, 0, len));
        // 5. 通过Socket对象的getOutputStream()获取套接字的输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        // 6. 通过OutputStream对象的write方法向客户端发送数据
        os.write("连接成功".getBytes());
        // 7. 释放资源,关闭套接字
        socket.close();
        serverSocket.close();
    }

运行步骤、结果

先运行服务端,在启动客户端
服务器控制台输出

请求连接1

客户端控制台输出

连接成功
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容