Java-简单TCP C/S的实现

通信的步骤:

  1. 服务器先启动监听(ServerSocket.accept)
  2. 客户端向服务器发送请求(向OutputStream中写入给服务器的信息)
  3. 服务器接收到信息,发送回应,关闭释放资源
  4. 客户端收到回应,关闭释放资源

⚠️注意:客户端和服务器之间的链接是IO对象,通过字节流对象进行通信。

字节流对象:OutputStream(getOutputStream.write())、InputStream(getInputStream.read())、

// TCPClient
package com.joeaaa.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        // 1、创建一个客户端对象socket,构造方法绑定服务器的IP地址和端口号
        Socket socket = new Socket("127.0.0.1",8888);
        // 2、使用Socket对象中的getOutputStream()方法来获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        // 3、使用网络字节输出流OutputStream对象中的write方法,写数据给服务器
        os.write("hello, server!".getBytes());
        // 4、使用Socket对象中的getInputStream()方法来获取网络字节数入流InputStream对象
        InputStream is = socket.getInputStream();
        // 5、使用网络字节数入流InputStream对象中的方法read,读取服务器返回的数据
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        // 6、释放资源
        socket.close();
    }
}

// TCPServer
package com.joeaaa.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        // 1、创建服务器ServerSocket对象和指定的端口号
        ServerSocket server = new ServerSocket(8888);
        // 2、使用ServerSocket对象中的accept,获取到请求的客户端对象
        Socket socket = server.accept();
        // 3、使用Socket对象中的getInputStream()方法,获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();
        // 4、使用网络字节输入流InputStream对象的read方法,读取客户端发送的数据
        byte[] bytes = new byte[1024];
        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("Server received!".getBytes());
        // 7、释放资源
        socket.close();
        server.close();
    }
}