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

【JAVA】创建一个建单的TCP服务端和客户端

SimpleTcpServer

package main;
import java.io.*;
import java.net.*;public class SimpleTcpServer {// 服务器监听的端口private static final int PORT = 8888;public static void main(String[] args) {ServerSocket serverSocket = null;try {// 创建服务器套接字,绑定到指定端口并开始监听serverSocket = new ServerSocket(PORT);System.out.println("TCP服务器已启动,正在监听端口: " + PORT);// 循环接受客户端连接while (true) {// 阻塞等待客户端连接Socket clientSocket = serverSocket.accept();System.out.println("新客户端连接: " +clientSocket.getInetAddress().getHostAddress() +":" + clientSocket.getPort());// 为每个客户端连接创建一个新线程处理,避免阻塞主线程new Thread(() -> handleClient(clientSocket)).start();}} catch (IOException e) {System.err.println("服务器启动失败: " + e.getMessage());} finally {// 关闭服务器套接字if (serverSocket != null) {try {serverSocket.close();System.out.println("服务器已关闭");} catch (IOException e) {System.err.println("关闭服务器时发生错误: " + e.getMessage());}}}}/*** 处理客户端连接的方法*/private static void handleClient(Socket clientSocket) {try (// 获取输入流,用于读取客户端发送的消息BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));// 获取输出流,用于向客户端发送消息PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())),true)) {String clientMessage;// 读取客户端发送的消息,直到客户端关闭连接while ((clientMessage = in.readLine()) != null) {System.out.println("收到来自客户端的消息: " + clientMessage);// 向客户端发送响应String response = "服务器已收到: " + clientMessage;out.println(response);System.out.println("已向客户端发送响应: " + response);}System.out.println("客户端已断开连接");} catch (IOException e) {System.err.println("与客户端通信时发生错误: " + e.getMessage());} finally {// 关闭客户端连接try {clientSocket.close();} catch (IOException e) {System.err.println("关闭客户端连接时发生错误: " + e.getMessage());}}}
}

TcpClient

package main;import java.io.*;
import java.net.Socket;public class TcpClient {public static void main(String[] args) {// 服务器IP和端口String serverIp = "127.0.0.1";int serverPort = 8888;// 用于存储从服务器接收的消息String serverMessage = null;try (// 建立与服务器的连接Socket socket = new Socket(serverIp, serverPort);// 获取输出流,用于向服务器发送消息PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);// 获取输入流,用于接收服务器的消息BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {System.out.println("已成功连接到TCP服务器: " + serverIp + ":" + serverPort);// 发送消息到服务器String messageToSend = "Hello from TCP client!";out.println(messageToSend);System.out.println("已发送消息: " + messageToSend);// 接收服务器返回的消息serverMessage = in.readLine();if (serverMessage != null) {System.out.println("从服务器接收的消息: " + serverMessage);} else {System.out.println("未收到服务器的响应");}} catch (IOException e) {System.err.println("连接或通信过程中发生错误: " + e.getMessage());e.printStackTrace();}}
}

文章转载自:

http://pGRkWlcp.mtgnd.cn
http://gJ7ILYOh.mtgnd.cn
http://skmxd1ZP.mtgnd.cn
http://AhdUgX1Q.mtgnd.cn
http://6NVkDTMo.mtgnd.cn
http://yHvtjSrV.mtgnd.cn
http://2oD182mq.mtgnd.cn
http://SdPp4nsn.mtgnd.cn
http://P3BwKla6.mtgnd.cn
http://gPafGx2P.mtgnd.cn
http://JMjy4Cer.mtgnd.cn
http://XELICJSb.mtgnd.cn
http://wglfSy2e.mtgnd.cn
http://dqk6sJz9.mtgnd.cn
http://YkDtUbVi.mtgnd.cn
http://x0Rk181m.mtgnd.cn
http://T1YD9QoC.mtgnd.cn
http://TyUVb0uZ.mtgnd.cn
http://YV9zGv8g.mtgnd.cn
http://TM1Ma7kd.mtgnd.cn
http://gSlbgdSh.mtgnd.cn
http://k2YnTTBb.mtgnd.cn
http://DGR5OYm0.mtgnd.cn
http://yd9Uhi0M.mtgnd.cn
http://e4IcoPmL.mtgnd.cn
http://ngS6a8rf.mtgnd.cn
http://N6H2Qahj.mtgnd.cn
http://fVWO2JAg.mtgnd.cn
http://cAv9RwEN.mtgnd.cn
http://yvjWP10D.mtgnd.cn
http://www.dtcms.com/a/367344.html

相关文章:

  • AI智汇社区凭什么半年估值破亿?这家公司让普通人也能玩转AI开发
  • WebSocket简述与网络知识回顾
  • 揭秘23种设计模式的艺术与技巧之行为型
  • 【LeetCode每日一题】94. 二叉树的中序遍历 104. 二叉树的最大深度
  • 渗透测试与网络安全审计的关系
  • Qwen2.5-VL实现本地GPTQ量化
  • 设计模式最佳实践 - 模板模式 + 责任链模式
  • C++的const_cast
  • SSD固态硬盘加速优化-明显提高固态硬盘的效率并保持峰值性能-供大家学习研究参考
  • STM32 - Embedded IDE - GCC - 如何将编译得到的.bin固件添加CRC32校验码
  • VSCode中的扩展Extension说明
  • 《IC验证必看|semaphore与mailbox的核心区别》
  • Web与Nginx
  • JS 可迭代对象详解:从概念到实践的全方位剖析
  • 同城酒水推广算法怎么做?
  • (自用)PowerShell常用命令自查文档
  • 当公司在你电脑上安装了IP-guard,你必须知道的事
  • 【已更新文章+代码】2025数学建模国赛B题思路代码文章高教社杯全国大学生数学建模-碳化硅外延层厚度的确定
  • 空车不空,英魂长在(记9.3大阅兵)
  • MySQL并发问题解析
  • linux——自定义协议
  • 基于联邦学习的政务大数据平台应用研究
  • Jenkins调用ansible部署lnmp平台
  • 迈威通信从送快递角度教你分清网络二层和三层
  • 热计量表通过M-Bus接口实现无线集抄系统的几种解决方
  • 从KV Cache竞争到多卡优化:vLLM加载AWQ模型的显存优化全攻略
  • 8.7 通过时间反向传播
  • 基于扣子平台构造AutoGen框架的多智能体使用-----封装成FastAPI接口供调用
  • 谈谈你对ThreadLocal的理解
  • YOLOv11全方位改进指南:从Backbone到检测头的深度优化