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

基于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,绑定端口9999serverSocket = 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.mrgr.cn/news/28981.html

相关文章:

  • 如何在vscode 中打开新文件不覆盖上一个窗口
  • 标准C++ 字符串
  • 287. 寻找重复数(二分查找)
  • 代码随想录训练营Day24 | 134. 加油站 - 135. 分发糖果 - 860.柠檬水找零 - 406.根据身高重建队列
  • 聊天服务器(4)CMake
  • 外星人入侵
  • grep 命令:文本搜索
  • Qt优秀开源项目之二十三:QSimpleUpdater
  • Vert.x初探
  • 星火AI图片理解API文档
  • claude,gpt,通义千问
  • 人工智能与机器学习原理精解【20】
  • 探索 InternLM 模型能力边界
  • OpenAI API key not working in my React App
  • 稠密向量检索、稀疏向量检索、BM25检索三者对比
  • 获取Live2d模型
  • 办了房屋抵押经营贷,空壳公司不怕被查吗?续贷不上怎么办?
  • stella_vslam
  • 神经网络-MNIST数据集训练
  • Typora安装,使用,图片加载全流程!!!
  • BUUCTF逆向wp [WUSTCTF2020]level3
  • 从函数的角度理解运算
  • 【基于 Delphi 的人才管理系统】
  • Java String类讲解(第一节) String构造方法/比较/查找/转化/替换/拆分/截取
  • (算法)大数的进制转换
  • GetMaterialApp组件的用法