当前位置: 首页 > article >正文

基于TCP实现聊天

TCP客户端代码

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClientDemo01 {

    public static void main(String[] args) {
        Socket socket = null;
        OutputStream os = null;
        InputStream is = null;
        BufferedReader reader = null;

        try {
            // 1. 要知道服务器的地址、端口号
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            int port = 9999;

            // 2. 创建一个Socket连接
            socket = new Socket(serverIP, port);

            // 3. 创建输出流,用于发送消息给服务器
            os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);

            // 4. 创建输入流,用于接收服务器的消息
            is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            // 5. 客户端输入消息
            reader = new BufferedReader(new InputStreamReader(System.in));
            String clientMessage;
            String serverResponse;

            while (true) {
                // 读取客户端输入的消息
                System.out.print("客户端: ");
                clientMessage = reader.readLine();

                // 发送消息到服务器
                pw.println(clientMessage);

                // 接收服务器返回的消息
                serverResponse = br.readLine();
                System.out.println("服务器: " + serverResponse);

                // 判断是否退出
                if ("bye".equalsIgnoreCase(clientMessage)) {
                    break;
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (reader != null) reader.close();
                if (is != null) is.close();
                if (os != null) os.close();
                if (socket != null) socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

TCP服务器代码

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo01 {

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;

        try {
            // 1. 创建一个服务器端的Socket,绑定端口9999
            serverSocket = new ServerSocket(9999);

            // 2. 等待客户端连接
            System.out.println("服务器等待连接...");
            socket = serverSocket.accept();
            System.out.println("客户端已连接!");

            // 3. 获取客户端发送的消息
            is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));

            // 4. 创建输出流,发送消息给客户端
            os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);

            String clientMessage;
            String serverMessage;

            while (true) {
                // 读取客户端发送的消息
                clientMessage = br.readLine();
                System.out.println("客户端: " + clientMessage);

                // 判断是否退出
                if ("bye".equalsIgnoreCase(clientMessage)) {
                    pw.println("再见!");
                    break;
                }

                // 服务器回复消息
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                System.out.print("服务器: ");
                serverMessage = reader.readLine();

                // 发送回复给客户端
                pw.println(serverMessage);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (br != null) br.close();
                if (is != null) is.close();
                if (os != null) os.close();
                if (socket != null) socket.close();
                if (serverSocket != null) serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


http://www.kler.cn/a/314104.html

相关文章:

  • flink cdc 应用
  • 《FreeRTOS任务控制块篇》
  • 基于ECS实例搭建Hadoop环境
  • 3. Sharding-Jdbc核⼼流 程+多种分⽚策略
  • 使用 Vision 插件让 GitHub Copilot 识图问答
  • ECharts 实现大屏地图功能
  • Spring中的Web Service消费者集成(应该被淘汰的技术)
  • c++实现类
  • React基础教程(10):React Hooks
  • 1.4 MySql配置文件
  • C++学习笔记(24)
  • Spring Boot-应用启动问题
  • supermap iclient3d for cesium模型沿路径移动
  • 高效音频格式转换实战:使用Python和FFmpeg处理MP3到WAV的转换20240918
  • WIFI路由器的套杆天线简谈
  • 基于SpringBoot的高校实习信息发布网站【附源码】
  • RK3588/RK3588s运行yolov8达到27ms
  • 如何设置word页码从指定页开始
  • itk c++ 3D医学图像刚性配准
  • Linux面试题-日志量很大,怎么查看到目标日志
  • u-code-input结合u-keyboard实现支付密码+数字键盘
  • MODIS/Landsat/Sentinel下载教程详解【常用网站及方法枚举】
  • ESP8266做httpServer提示Header fields are too long for server to interpret
  • OpenCV读取并保存中文路径图片指南
  • 车载软件调试工具系列---Trace32断点功能
  • Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解