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

Java基础-TCP通信(多发多收和一发一收)

目录

案例要求:

实现思路:

代码:

User:客户端

Client:服务端

总结:


案例要求:

实现TCP通信的多发多收和一发一收,多发多收去掉各自的while循环就是一发一收,本文只模拟一发一收

实现思路:

客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。

代码:

User:客户端

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
import java.util.Scanner;public class User {public static void main(String[] args) throws Exception {Socket socket = new Socket("127.0.0.1", 8888);OutputStream out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);Scanner sc = new Scanner(System.in);while (true) {String msg= sc.nextLine();if(msg.equals("exit")){dos.close();socket.close();break;}dos.writeUTF(msg);}}
}

Client:服务端

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;public class Client {public static void main(String[] args) throws  Exception{ServerSocket serverSocket = new ServerSocket(8888);Socket socket = serverSocket.accept();InputStream in = socket.getInputStream() ;DataInputStream dis = new DataInputStream(in);while (true) {String msg=dis.readUTF();System.out.println("收到用户端的消息:"+msg);String ip=socket.getInetAddress().getHostAddress();String port=socket.getPort()+"";System.out.println("ip:"+ip+" port:"+port);}}
}


总结:

本文实现了一发一收的TCP通信模型。客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。

http://www.xdnf.cn/news/17362.html

相关文章:

  • PHP-单引号和双引号(通俗易懂讲解版)
  • MySQL 元数据详细说明
  • AI基础与实践专题:神经网络基础
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书
  • Java 8 特性
  • 网络管理实战
  • 【QT】常⽤控件详解(六)多元素控件 QListWidget Table Widget Tree Widget
  • QT第三讲- 机制、宏、类库模块
  • MBR分区nvme固态硬盘安装win7--非UEFI启动和GPT分区
  • ruoyi关闭shiro校验,任何接口可以直接访问
  • 可直接运行的 Playwright C# 自动化模板
  • 贪心----1.买卖股票的最佳时机
  • 基于 InfluxDB 的服务器性能监控系统实战(二)
  • 代码随想录day59图论9
  • [已解决]VSCode右键菜单消失恢复
  • GPT-4 vs GPT-5 深度分析
  • 制作浏览器CEFSharp133+X86+win7 之配置环境(一)
  • Product Hunt 每日热榜 | 2025-08-09
  • 【C++详解】AVL树深度剖析与模拟实现(单旋、双旋、平衡因⼦更新、平衡检测)
  • 基于clodop和Chrome原生打印的标签实现方法与性能对比
  • 【MySQL】事务的基本概念
  • 揭秘MyBatis核心类MappedStatement
  • 【Datawhale AI夏令营】基于多模态RAG的企业财报问答系统
  • Vue3 生命周期
  • Go语言实战案例:表单提交数据解析
  • 多模态RAG赛题实战--Datawhale AI夏令营
  • 39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本
  • 通过 Docker 运行 Prometheus 入门
  • C# 通过第三方库INIFileParser管理INI配置文件
  • 2025年渗透测试面试题总结-09(题目+回答)