TCP通信

package network;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
 * TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过该链路通信
 *
 * Java对于基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
 * Java为客户端提供了 Socket类 ,为服务端提供了ServerSocket类
 */
public class TcpDemo {
    public static void main(String[] args) {

    }

    /**
     * 服务端:
     * 1、创建服务器端的Socket对象(ServerSocket)
     * 2、获取输入流,读数据,并把数据显示在控制台
     * 3、释放资源
     */
    public static void server() throws IOException {
        //创建服务器端的Socket对象(ServerSocket)
        //ServerSocket(int port) 创建绑定到指定端口的服务器套接字
        ServerSocket serverSocket = new ServerSocket(10086);

        //accept() 侦听要连接到此套接字并接受它
        Socket accept = serverSocket.accept();

        //获取输入流
        InputStream is = accept.getInputStream();
        byte[] bys = new byte[1024];
        int read = is.read(bys);
        String s = new String(bys, 0, read);

        System.out.println(s);

        //回复客户端
        OutputStream os = accept.getOutputStream();
        os.write("收到了你的来信".getBytes(StandardCharsets.UTF_8));


    }

    /**
     * 客户端:
     * 1、创建客户端的Socket对象(Socket)
     * 2、获取输出流,写数据
     * 3、释放资源
     */
    public static void client() throws IOException {
        //创建客户端的Socket
        //Socket(InetAddress address, int port) 创建流套接字并将其连接到指定IP地址的指定端口号。
        Socket socket = new Socket("192.168.3.14",10086);

        //获取输出流,写数据(发送到服务端)
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("你好,TCP".getBytes(StandardCharsets.UTF_8));

        //读取服务端回复数据
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int read = inputStream.read(bytes);
        String s = new String(bytes, 0, read);
        System.out.println(s);
        //关闭资源
        socket.close();

    }


}

添加新评论