UDP数据报套接字编程

1.1UDP编程原理

          对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报。Java中使用UDP协议通信,主要基于DatagramSocket类来发送或接收数据报套接字,并使用DatagramPacket作为创建的UDP数据报,DatagramPacket类对象就是UDP协议中Socket的数据报。 

1.2 DatagramSocket API

DatagramSocket 是UDP Socket,用于发送和接收UDP数据报。

(1) DatagramSocket 构造方法:

(2)DatagramSocket 方法: 

1.3DatagramPacket类

(1)DatagramPacket构造方法

构造方法如下:

 

(2)DatagramPacket普通方法 

2.1服务器端代码

public class EchoServer {//服务器端//1、创建一个DatagramSocket对象DatagramSocket socket = null;public EchoServer(int port) throws SocketException {//服务器端需要自己指定端口号socket = new DatagramSocket(port);//这么写就是手动指定端口号//socket = new DatagramSocket();//这么写就是系统自动分配端口号}public void start() throws IOException {System.out.println("服务器启动...");while (true){DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);//requestPacket这个对象是用来承载数据的,在创建的时候需要创建一块内存空间来保存数据socket.receive(requestPacket);//当前完成的receive之后,数据是以二进制的形式存储到DatagramPacket中//还需要把这个二进制的数据转化成字符串的形式String request = new String(requestPacket.getData(),0,requestPacket.getLength());//范围为0到requestPacket.getLength(),requestPacket.getLength()表示数据的真实长度//2、根据请求,计算响应(服务器端最核心的作用)String response = process(request);//3、把响应写回到客户端//搞一个响应对象,DatagramPacket//把DatagramPacket构造刚才的数据,再通过send返回DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.getBytes().length,requestPacket.getSocketAddress());//指定数据内容,同时指定数据要发给谁socket.send(responsePacket);//4、打印一个日志,把这次的数据交互的详情给打印出来System.out.printf("[%s:%d] req = %s,resp = %s\n",responsePacket.getAddress().toString(),responsePacket.getPort(),request,response);}}public String process(String request) {//请求是啥样,响应就是啥样//回转响应的方法return request;}public static void main(String[] args) throws IOException {EchoServer server = new EchoServer(9090);//实例测试server.start();}
}

 2.2客服端代码

public class EchoClient {//客户端private DatagramSocket socket = null;private String serverIP = "";private int serverPort = 0;public EchoClient(String ip,int port) throws SocketException {//创建这个对象不能手动指定端口socket = new DatagramSocket();//由于 UDP自身不会持有对端信息,就需要在应用程序里,把对端的情况给记录下来//这里咱们主要记录对端的ip和端口serverIP = ip;serverPort = port;}public void start() throws IOException {System.out.println("客户端启动...");Scanner scanner = new Scanner(System.in);while (true){//1、控制台读取数据,作为请求System.out.println(" -> ");String request = scanner.next();//2、把请求的内容构造成DatagramSocket对象,发送给服务器DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,InetAddress.getByName(serverIP),serverPort);socket.send(requestPacket);//3、尝试获取服务器响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//4、把响应给转换出字符串,并显示出来String response = new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {EchoClient client = new EchoClient("127.0.0.1",9090);client.start();}
}

2.3运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/275634.html

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

相关文章

NBlog整合OSS图库

NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 由于项目是fork的,所以我本身并不清楚哪里使用了图床,因此下面就是我熟悉项目期间边做边调整的。 目前已经调整的功能…

Docker容器Docker桌面配置镜像加速

打开Docker Desktop应用程序,点击设置 具体配置如下: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buil…

个人博客系列-后端项目-用户注册功能(7)

介绍 用户注册API的主要流程:1.前端用户提交用户名,密码 2. 序列化器校验用户名,密码是否合法。3.存入数据库。4.签发token 创建序列化器 from rest_framework import serializers from rest_framework_simplejwt.serializers import Toke…

防御安全(IPSec实验)

目录 需求: pc1 ping通 pc2 ,使用IPSec VPN 拓扑图: ​编辑实验配置: 注意: 直接在路由器r1和r2分别配置即可,路由器r1和r2要写一条缺省指向ISP 实验配置截图如下: 2. r1​编辑 3. r3​编辑 3.r…

Electron程序如何在MacOS下获取相册访问权限

1.通过entitiment.plist,在electron-builder签名打包时,给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证,若出现这个,则说明成…

[BJDCTF2020]Cookie is so stable

hint提示查看cookies flag.php页面我们先随便输入一个名字 输入后我们重新进一次flag.php,发现cookie里存储了刚刚登陆时输入的用户名,直接猜是ssti 尝试后根据ssti特征判断是twig模板 {{_self.env.registerUndefinedFilterCallback("exec")…

VUE实现Provide的计算属性

通过此篇可以学到: 如何使用Providerinject进行“跨代”传值如何实现一个计算属性的Provider如何解决告警“injection "xxxxx" not found. ” 一、描述 目前需要创建一个计算属性传入Provide,并且能够被其他组件Inject 二、实现 父组件 .…

计算机网络—OSPF单区域配置

目录 目录 1.实验环境准备 2.配置 OSPF 3.验证 OSPF 配置 4.修改 OSPF hello 和 dead 时间参数 5.OSPF缺省路由发布及验证 6.控制 OSPF DR/BDR 的选举 7.配置文件 拓扑图&#xff1a; 1.实验环境准备 基本配置以及IP编址。 <Huawei>system-view Enter system vi…

Tomcat多实例及nginx反向代理tomcat

tomcat多实例介绍&#xff1a; 什么是Tomcat多实例&#xff1f; Tomcat多实例就是指在同一台服务器上运行多个独立的tomcat实例&#xff0c;每个实例之间都是相互隔离的。每个tomcat实例都具有独立的配置文件、日志文件、应用程序和端口。通过配置不同的端口和文件目录&#xf…

如何有效避免团队内耗,提升团队整体效能

团队内耗是一个普遍存在的问题&#xff0c;它可能导致工作效率低下、沟通不畅、成员间的信任缺失&#xff0c;甚至可能导致整个团队的崩溃。 它可能源于成员间的误解、利益冲突&#xff0c;或是个人情绪的波动。 如何避免团队内耗&#xff0c;是每个团队管理者和成员都应该关…

骏聪科技:以科技之力赋能企业 打造数字时代安全基石

在当今数字化时代,信息安全和技术信息化已经成为了现代社会的一个重要议题。随着科技的迅猛发展,信息技术的普及,以及网络互联的普遍性,安全技术信息化行业也蓬勃发展。这个领域的增长不仅改变了我们的日常生活,也对各行各业产生了深远的影响。在这个发展浪潮中,苏骏聪信息科技…

景联文科技:提供行业垂直大模型训练数据

近年来&#xff0c;以大模型为代表的人工智能技术已成为国家科技实力竞争的焦点。其中垂直大模型作为重要方向&#xff0c;在相关政策引导及市场需求的驱动下&#xff0c;已展现出较强的发展活力。 行业垂直大模型是针对特定行业的需求和场景进行深度定制的。这意味着模型在训练…

SpringCloud Gateway 新一代网关

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第六篇&#xff0c;即介绍 Gateway 新一代网关。 二、概述 2.1 Gateway 是什么 Gateway 是在 Spring 生…

(黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_01&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——保护 今日目标1.初识Sentinel1.1.雪崩问题及解决方案1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel 1.…

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…

`httpsok`:轻松搞定免费的泛域名SSL/TLS证书

&#x1f525;&#x1f525;&#x1f525; httpsok&#xff1a;轻松搞定免费的泛域名SSL/TLS证书 在当今互联网时代&#xff0c;网站的安全性已成为一项不可或缺的重要因素。其中&#xff0c;采用HTTPS协议是一种有效的保护措施&#xff0c;但对于个人和团队开发者来说&#x…

Ubuntu23.10安装FFmpeg及编译FFmpeg源码

安装FFmpeg: 打开终端: 输入 sudo apt install ffmpeg 安装成功: 验证FFmpeg 默认安装位置与库与头文件位置 使用FFmpeg源码编译: 1.安装YASM sudo apt-get install yasm

2024年腾讯云便宜学生云服务器购买攻略

腾讯云学生服务器优惠活动「云校园」轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置112元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G3M公网带宽配置842.4元一年&#xff0c;腾讯云服务器网txyfwq.com分享2…

数据库管理-第160期 Oracle Vector DB AI-11(20240312)

数据库管理160期 2024-03-12 数据库管理-第160期 Oracle Vector DB & AI-11&#xff08;20240312&#xff09;1 向量的函数操作to_vector()将vector转换为标准值vector_norm()vector_dimension_count()vector_dimension_format() 2 将向量转换为字符串或CLOBvector_seriali…

观测云产品更新 | 监控器新增组合检测、新增跨工作空间 ServiceMap 等

观测云更新 监控 > 新增「组合监控 」 支持将工作空间内的多个监控器检测结果组合判断&#xff0c;帮助您在复杂的判断条件或存在依赖场景时&#xff0c;进行更加灵活的监控触发。 详情说明&#xff0c;请参见&#xff1a;组合检测 - 观测云文档 服务优化 新增支持跨空间…