JAVA TCP通信(客户端-服务端)

该博客介绍了TCP/IP通信的基本过程,包括客户端如何发送数据和服务端如何接收数据。在简单通信中,客户端创建socket连接并发送字符串,服务端接收到数据并打印。在互通往来场景中,双方都能发送和接收消息,实现了双向通信。
摘要由CSDN通过智能技术生成

一、简单通信

①客户端发送数据

// 创建客户端的socket服务,指定目的主机和端口
Socket sc = new Socket(" 172.20.1.34", 10000);
// 为了发送数据,应该获取socket中的输出流
OutputStream out = sc.getOutputStream();

// write接收字节数据
out.write("tcp test".getBytes());

sc.close();

②服务端接收数据

public static void main(String[] args) throws Exception{
        // 建立服务端Socket服务,并指定监听一个端口
        ServerSocket ss = new ServerSocket(10000);

        // 通过accept方法来获取连接过来的客户端对象

        Socket s = ss.accept();

        String IP = s.getInetAddress().getHostAddress();
        System.out.println("IP:"+IP+"...connected");

        // 获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
        // 这里的源来自对方机器网络数据,
        InputStream is = s.getInputStream();

        byte[] b = new byte[1024];
        int len = is.read(b);
        System.out.println(new String(b,0,len));
//        System.out.println(is.read(b));
        s.close();
    }

在这里插入图片描述

二、互通往来

①客户端

public static void main(String[] args) throws Exception{
    // 创建客户端的socket服务,指定目的主机和端口
    Socket sc = new Socket("172.20.1.34", 10000);
    // 为了发送数据,应该获取socket中的输出流
    OutputStream out = sc.getOutputStream();

    // write接收字节数据
    out.write("第一次握手".getBytes());

    InputStream is = sc.getInputStream();

    byte[] by = new byte[1024];
    int len = is.read(by);//read没读到数据会监听等待
    System.out.println(new String(by, 0 ,len));
    sc.close();

}

②服务端

public static void main(String[] args) throws Exception{
        // 建立服务端Socket服务,并指定监听一个端口
        ServerSocket ss = new ServerSocket(10000);

        // 通过accept方法来获取连接过来的客户端对象

        Socket s = ss.accept();

        String IP = s.getInetAddress().getHostAddress();
        System.out.println("IP:"+IP+"...connected");

        // 获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
        // 这里的源来自对方机器网络数据,
        InputStream is = s.getInputStream();

        byte[] b = new byte[1024];
        int len = is.read(b);
        System.out.println(new String(b,0,len));
//        System.out.println(is.read(b));
        OutputStream os = s.getOutputStream();
        os.write("第二次握手".getBytes());
        s.close();
        ss.close();
    }

在这里插入图片描述
在这里插入图片描述

以下是使用 Java TCP 实现客户端服务端持续收发业务的基本步骤: 1. 创建服务器端套接字: ```java ServerSocket serverSocket = new ServerSocket(port); ``` 其中,`port` 是服务器端口号。 2. 等待客户端连接: ```java Socket clientSocket = serverSocket.accept(); ``` `accept()` 方法会一直阻塞,直到有客户端连接并返回一个 `Socket` 对象,表示已连接到客户端。 3. 创建客户端套接字: ```java Socket socket = new Socket(ip, port); ``` 其中,`ip` 是服务器的 IP 地址,`port` 是服务器端口号。 4. 在客户端和服务器端分别获取输入输出流: ```java // 服务器端获取输入输出流 InputStream in = clientSocket.getInputStream(); OutputStream out = clientSocket.getOutputStream(); // 客户端获取输入输出流 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); ``` 5. 在客户端和服务器端分别进行读写操作: ```java // 服务器端读取客户端发送的数据 byte[] buffer = new byte[1024]; int len = in.read(buffer); String message = new String(buffer, 0, len); // 服务器端向客户端发送数据 String response = "Hello, client!"; out.write(response.getBytes()); // 客户端读取服务器发送的数据 byte[] buffer = new byte[1024]; int len = in.read(buffer); String message = new String(buffer, 0, len); // 客户端向服务器发送数据 String request = "Hello, server!"; out.write(request.getBytes()); ``` 以上是基本的 TCP 通信流程。在实际应用中,需要对读写操作进行封装和优化,以提高性能和可靠性。同时,还需要考虑并发连接和异常处理等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值