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

UDP和TCP示例程序

查看自己的IP地址

以管理员身份运行cmd

输入

ipconfig

复制图中的IPv4地址

UDP通信程序

UdpReceiver.java

import java.net.*;public class UdpReceiver {public static void main(String[] args) {// 监听端口(需与发送端保持一致)int listenPort = 8888;// 接收数据的缓冲区大小(这里设置为1024字节)byte[] receiveBuffer = new byte[1024];try (DatagramSocket socket = new DatagramSocket(listenPort)) {System.out.println("接收端已启动,正在监听端口 " + listenPort + " ...");// 创建用于接收数据的空数据报包DatagramPacket packet = new DatagramPacket(receiveBuffer, receiveBuffer.length);// 阻塞等待接收数据(程序会在此处暂停,直到收到数据)socket.receive(packet);// 解析接收到的数据String receivedMessage = new String(packet.getData(), 0, packet.getLength()  // 只取有效数据部分(避免缓冲区残留数据干扰));// 打印发送方信息和接收内容System.out.println("收到来自 " + packet.getAddress().getHostAddress() + ":" + packet.getPort() + " 的消息:" + receivedMessage);} catch (SocketException e) {System.err.println("Socket创建失败(可能端口被占用):" + e.getMessage());} catch (Exception e) {System.err.println("接收过程中发生异常:" + e.getMessage());}}
}

UdpSender.java

import java.net.*;public class UdpSender {public static void main(String[] args) {// 目标IP地址String targetIp = "172.18.92.212";// 目标端口(需与接收端保持一致)int targetPort = 8888;// 要发送的数据String message = "这是来自UDP发送端的测试消息!";try (DatagramSocket socket = new DatagramSocket()) {// 将字符串转换为字节数组byte[] sendData = message.getBytes();// 创建数据报包:指定目标地址、端口和要发送的数据DatagramPacket packet = new DatagramPacket(sendData, sendData.length, InetAddress.getByName(targetIp), targetPort);// 发送数据报socket.send(packet);System.out.println("发送成功!发送内容:" + message);} catch (SocketException e) {System.err.println("Socket创建失败:" + e.getMessage());} catch (UnknownHostException e) {System.err.println("目标IP地址解析失败:" + e.getMessage());} catch (Exception e) {System.err.println("发送过程中发生异常:" + e.getMessage());}}
}

运行

先启动接收端,再启动发送端

TCP通信程序

TcpClient.java

import java.io.*;
import java.net.*;public class TcpClient {public static void main(String[] args) {// 目标服务器IPString serverIp = "172.18.92.212";// 目标服务器端口(需与服务器端保持一致)int serverPort = 9999;// 要发送的数据String message = "这是来自TCP客户端的测试消息!";try (Socket socket = new Socket(serverIp, serverPort);OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os, true)) {  // 自动刷新缓冲区// 发送数据pw.println(message);System.out.println("客户端已连接服务器,消息发送成功:" + message);} catch (UnknownHostException e) {System.err.println("目标服务器IP解析失败:" + e.getMessage());} catch (ConnectException e) {System.err.println("连接失败(可能服务器未启动/端口错误):" + e.getMessage());} catch (IOException e) {System.err.println("通信过程中发生异常:" + e.getMessage());}}
}

TcpServer.java

import java.io.*;
import java.net.*;public class TcpServer {public static void main(String[] args) {// 监听端口(需与客户端保持一致)int listenPort = 9999;try (ServerSocket serverSocket = new ServerSocket(listenPort)) {System.out.println("服务器已启动,正在监听端口 " + listenPort + " ...");// 阻塞等待客户端连接(程序会在此处暂停,直到有客户端连接)try (Socket clientSocket = serverSocket.accept()) {  // 接收到连接后自动关闭clientSocketInetSocketAddress clientAddress = (InetSocketAddress) clientSocket.getRemoteSocketAddress();System.out.println("客户端连接成功!客户端地址:" + clientAddress.getAddress().getHostAddress() + ":" + clientAddress.getPort());// 获取输入流读取客户端数据InputStream is = clientSocket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));// 读取一行数据(与客户端的println对应)String receivedMessage = br.readLine();System.out.println("收到客户端消息:" + receivedMessage);} catch (IOException e) {System.err.println("客户端连接处理异常:" + e.getMessage());}} catch (IOException e) {System.err.println("服务器启动失败(可能端口被占用):" + e.getMessage());}}
}

运行

先启动服务器端,再启动客户端

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

相关文章:

  • 【MySQL】第8节|Innodb底层原理与Mysql日志机制深入剖析(一)
  • 从稳定到卓越:服务器部署后的四大核心运维策略
  • IP查询基础介绍
  • 二、ZooKeeper 集群部署搭建
  • 《深入Python:新手易踩的语法雷区与进阶启示》
  • STM32CubeMX的初使用GPIO的端口配置
  • 虚幻基础:AI
  • Baklib内容中台的主要构成是什么?
  • 大般涅槃经卷第三十五
  • windows11 安装 jupyter lab
  • ARM笔记-嵌入式系统基础
  • untiy实现汽车漫游
  • JVM(Java虚拟机)
  • MSP430通用电机控制代码(Motor)设计与实现
  • vue3 发票税率 计算
  • 人工智能杂谈(十二)大模型与小模型的应用场景及未来发展趋势
  • 电子电路:在导电过程中,铜线中的电子为什么不会消失?
  • MySQL 中表的约束 -- 空属性,默认值,主键,自增长,唯一键,外键
  • Python如何赋能自动驾驶地图构建?从点云处理到实时导航
  • 基于51单片机和8X8点阵屏、独立按键的滑动躲闪类小游戏
  • 从0到上线:微服务架构下的全栈开发实战指南
  • VILT模型阅读笔记
  • SSG vs SSR vs ISG 页面渲染策略对比
  • 为什么在设置 model.eval() 之后,pytorch模型的性能会很差?为什么 dropout 影响性能?| 深度学习
  • 第十节第九部分:jdk8新特性:方法引用、特定类型的方法引用、构造器引用(不要求代码编写后同步简化代码,后期偶然发现能用这些知识简化即可)
  • 鸿蒙UI开发——badge角标的使用
  • 从神经生物学到社会心理学:游戏沉迷机制的深度解构
  • Jest入门
  • 利用 XML 外部实体注入(XXE)读取文件和探测内部网络
  • redis缓存实战-19(使用 Pub/Sub 构建简单的聊天应用程序)