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.pswp.cn/news/906928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Double使用注意事项

目录 数据精度问题BigDecimal的正确使用构造陷阱数值比较除法舍入控制 RoundingMode 数据精度问题 Java开发中,Double类作为包装类用于处理双精度浮点数。浮点数double无法精确表示某些十进制小数(如0.1),导致运算结果出现误差 …

8.2 线性变换的矩阵

一、线性变换的矩阵 本节将对每个线性变换 T T T 都指定一个矩阵 A A A. 对于一般的列向量,输入 v \boldsymbol v v 在空间 V R n \pmb{\textrm V}\pmb{\textrm R}^n VRn 中,输出 T ( v ) T(\boldsymbol v) T(v) 在空间 W R m \textrm{\pmb W}\…

【后端高阶面经:微服务篇】5、限流实战:高并发系统流量治理全攻略

一、限流阈值的三维度计算模型 1.1 系统容量基准线:压测驱动的安全水位 1.1.1 压力测试方法论 测试目标:确定系统在资源安全水位(CPU≤80%,内存≤70%,RT≤500ms)下的最大处理能力测试工具: 单机压测:JMeter(模拟10万并发)、wrk(低资源消耗)集群压测:LoadRunner …

同一无线网络下的设备IP地址是否相同?

在家庭和办公网络普及的今天,许多人都会好奇:连接同一个Wi-Fi的设备是否共享相同的IP地址?这个问题看似简单,实则涉及多个角度。本文将为您揭示其中的技术奥秘。 用一个无线网IP地址一样吗?同一无线网络(如…

git push出现 “HTTP 400 curl 22 The requested URL returned error: 400...“错误

错误内容是: 错误:RPC 失败。HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading sideband packet 致命错误:远端意外挂断了 检查发现;文件大小5M,远低于100M&a…

对WireShark 中的UDP抓包数据进行解析

对WireShark 中的UDP抓包数据进行解析 本文尝试对 WireShark 中抓包的 UDP 数据进行解析。 但是在尝试对 TCP 中的 FTP 数据进行解析的时候,发现除了从端口号进行区分之外, 没有什么好的方式来进行处理。 import numpy as np import matplotlib.pyplot …

云原生安全基石:Linux进程隔离技术详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 进程隔离是操作系统通过内核机制将不同进程的运行环境和资源访问范围隔离开的技术。其核心目标在于: 资源独占:确保…

云迹机器人底盘调用

云迹机器人底盘调用还是比较友好的,就是纯socket收发指令就能实现,今天实现一个底盘移动到指定点位功能。底盘的默认IP是192.168.10.10通讯端口是31001,测试机与底盘接入统一网络后直接发指令即可。本文给出两种语言调用源码,选择…

勇闯Chromium—— Chromium的多进程架构

问题 构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。 从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃…

MYSQL中的分库分表及产生的分布式问题

分库分表是分布式数据库架构中常用的优化手段,用于解决单库单表数据量过大、性能瓶颈等问题。其核心思想是将数据分散到多个数据库(分库)或多个表(分表)中,以提升系统的吞吐量、查询性能和可扩展性。 一&am…

GAMES104 Piccolo引擎搭建配置

操作系统:windows11 家庭版 inter 17 12 th 显卡:amd 运行内存:>12 1、如何构建? 在github下载:网址如下 https://github.com/BoomingTech/Piccolo 下载后安装 git、vs2022 Git Visual Studio 2022 IDE - …

页表:从虚拟内存到物理内存的转换

目录 引言 虚拟内存 页表 单级页表 页表项 单级页表的不足 二级页表 四级页表 快表TLB 结语 引言 一个系统中,CPU和内存是被所有进程共享的,而且一个系统中往往运行着多个进程。如果一个进程不小心写了另一个进程的内存,那么被写入…

互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计

互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计 面试背景介绍 技术总监(严肃脸): 欢迎来到我们今天的模拟面试,我是技术部的李总监,负责平台后端架构和高可用系统设计。今天我们将围绕一个…

网络段、主机段、子网掩码

子网掩码把 IP 切割成了网络段和主机段两部分。同一网段下的不同主机之间可以互通网络。 掩码 IPV4 默认情况下 IP 地址 192.168.0.x 可以分配 256 个主机地址(不考虑首尾两个特殊的地址时)。 假设我们只需要用到 8 个主机,就可以借助子网掩…

从零搭建SpringBoot Web 单体项目2、SpringBoot 整合数据库

系列文章 从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目 从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库 目录 一、项目基础环境说明 二、数据库整合流程 1. 添加 MyBatis-Plus 相关依赖(pom.xml) 2…

4款顶级磁力下载工具,速度提升器,可以变下变播

今天给大家带来一些超给力的磁力下载工具,速度飞快,最高可达20MB/s,而且还能边下边播! 下载链接:夸克网盘分享(点击蓝色字体自行保存下载) 一、柚子下载 柚子下载界面干净,没有广…

怎样判断服务器网络质量的状态?

服务器存储着企业的重要数据信息,服务器的网络质量会影响到用户访问数据信息的速度,也决定着网站页面是否会出现卡顿或页面崩溃的情况,那我们对于服务器中网络质量的状态该如何进行判断呢? 服务器的网络状态通常是指服务器与外部网…

零基础入门Selenium自动化测试:自动登录edu邮箱

🌟 Selenium简单概述一下 Selenium 是一个开源的自动化测试工具,主要用于 Web 应用程序的功能测试。它能够模拟用户操作浏览器的行为(如点击按钮、填写表单、导航页面等),应用于前端开发、测试和运维领域。 特点 跨…

day36 python神经网络训练

目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…

如何确定是不是一个bug?

在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。如何准确判断一个问题是否属于Bug?本文将从Bug的定义、判定标准、常见误区和实战技巧四个方面展开,帮助测试工程师提高Bug判定的准确性。 1. Bug的定义:什么情况下算Bug? 一个Bug(缺陷)通常指软件…