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.mzph.cn/news/751135.shtml

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

相关文章

C++:菱形继承与虚继承

看下面这个示例代码 class A{ public: int num10; A(){cout<<"A构造"<<endl;} virtual void fun(){cout<<"A虚函数"<<endl;} };class B:public A{ public: B(){cout<<"B构造"<<endl;} void fun(){cout<…

可视化图表:南丁格尔玫瑰图,来自历史上最著名的护士。

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文分享可视化图表设计的南丁格尔玫瑰图设计&#xff0c;欢迎老铁持续关注我们。 一、南丁格尔与玫瑰图 南丁格尔&#xff08;Florence Nightingale&#xff0c;1820年-1910年&#xff09;是一位英国护士和统计学家&…

按位操作符详解

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来讨论一下按位操作符的知识点与应用&#xff0c;按位操作符有时候在解决一些问题的时候可以提供一个很好的解题思路&#xff0c;话不多说&#xff0c;我们直接来看&#xff01; 今天我们主要是从两个方面来讲述一下按位操作…

Redis:使用redis-dump导出、导入、还原数据实例

redis的备份和还原&#xff0c;借助了第三方的工具&#xff0c;redis-dump 1、安装必要环境 yum -y install zlib-devel openssl-devel2、安装redis-dump 安装ruby&#xff1a; ruby下载地址&#xff1a;https://www.ruby-lang.org/zh_cn/downloads/ 我下载的是 2.5.0 版本…

动态规划课堂6-----回文串问题

目录 引言&#xff1a; 例题1&#xff1a;回文子串 例题2&#xff1a;回文串分割IV 例题3&#xff1a;分割回文串II 例题4&#xff1a;最长回文子序列 例题5&#xff1a;让字符串成为回文串的最小插入次数 引言&#xff1a; 回文字符串 是正着读和倒过来读一样的字符串。…

【周赛】第385场周赛

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 【1】100212.统计前后缀下标对 100212. 统计前后缀下标对 Ihttps://leetcode.cn/problems/count-prefix-and-suffix-pairs-i/ 熟…

4.1_4 文件的物理结构

文章目录 4.1_4 文件的物理结构&#xff08;一&#xff09;文件块、磁盘块&#xff08;二&#xff09;文件分配方式——连续分配&#xff08;三&#xff09;文件分配方式——链接分配&#xff08;1&#xff09;链接分配——隐式链接&#xff08;2&#xff09;链接分配——显式链…

OpenStack之存储cinder

一、 存储 1、DAS 1)存储更多的依赖服务器主机操作系统进行数据的IO读写和存储维护管理&#xff0c;数据备份和恢复要求占用服务器主机资源&#xff08;包括CPU、系统IO等&#xff09; 2)直连式存储与服务器主机之间的连接通道通常采用SCSI连接&#xff0c;随着服务器CPU的处…

Type-C接口介绍

1、USB介绍 &#xff08;1&#xff09;标准USB A型连接器&#xff08;左&#xff09;及B型连接器&#xff08;右&#xff09; 引脚1 VCC&#xff08;5V&#xff09; 引脚2 Data- 引脚3 Data 引脚4 接地 &#xff08;2&#xff09;Micro USB 引脚定义及OTG (USB-HOST) …

k8s CKA upgrade - Kubeadm 版本升级实测

升级版本最好是逐步去升级&#xff0c;不要跨越多个大版本&#xff0c;可能会出错 大体流程&#xff1a; 1.先确定升级版本 2.升级kubeadm 3.驱逐节点 4.升级kubelet和kubectl 5.重启kubelet服务 6.恢复节点&#xff0c;使其上线 1.查看现版本&#xff1a;升级版本 kubectl ge…

华为配置Hotspot2.0无线网络示例

配置Hotspot2.0无线网络示例 组网图形 图1 配置Hotspot2.0无线网络组网图 组网需求配置思路配置注意事项操作步骤配置文件 组网需求 某网络服务商在原有移动网络业务的基础上&#xff0c;新增部署WLAN网络接入业务&#xff0c;为用户提供更好的网络体验。但传统的WLAN网络业…

【每日一题】2024年3月汇编(上)

3.1【2369】检查数组是否存在有效划分 2369. 检查数组是否存在有效划分https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 1.这样的判断可以用动态规划来解决&#xff0c;用一个长度为(n1) 的数组来记录 是否存在有效划分&#xff0c;dp[i]…

Bean的作用域、Bean的自动装配、注解自动装配 (Spring学习笔记五)

1、Bean 的作用域 官网上显示有六种 1、Bean的作用域默认的是singleton&#xff08;单例模式的实现&#xff09; 也可以显示的设置&#xff08;单例模式的实现&#xff09; <!--用scope可以设置Bean的作用域--><bean id"user2" class"com.li.pojo.Us…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

http请求方法15种,附图可以下载保存备查。

一、http请求组成和流程 HTTP请求是客户端&#xff08;如浏览器&#xff09;向服务器发送的请求&#xff0c;以获取特定资源或执行特定操作。HTTP请求由以下几个部分组成&#xff1a; 请求行&#xff1a;包含请求方法、请求的URL和HTTP协议版本。常见的请求方法有GET、POST、P…

数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

概念大合集01 1、数据结构基础的定义2、数据结构2.1 数据元素之间关系的集合2.2数据结构的三要素2.2.1数据的逻辑结构2.2.2数据的存储&#xff08;物理&#xff09;结构2.2.3数据的运算 3、数据类型4、抽象数据类型类型&#xff08;ADT&#xff09;5、算法及其描述5.1算法的5个…

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识&#xff0c;之前也写过一些博客&#xff1a; Qt关于路径的处理&#xff08;绝对路径、相对路径、路径拼接、工作目录、运行目录&#xff09;_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…

Docker学习之数据管理(超详解析)

Docker存储资源类型&#xff1a; 用户在使用 Docker 的过程中&#xff0c;势必需要查看容器内应用产生的数据&#xff0c;或者需要将容器内数据进行备份&#xff0c;甚至多个容器之间进行数据共享&#xff0c;这必然会涉及到容器的数据管理&#xff1a; &#xff08;1&#xff…

(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像 扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术&#xff0c;从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例&…

【剑指offer--C/C++】JZ25 合并两个排序的链表

题目 思路 这个题目大逻辑比较简单&#xff0c;就是一个比较和穿插&#xff0c;但细节上要考虑清楚&#xff0c;可以画个图模拟一下。我这里是设置将两个链表拆开组成一个新的链表&#xff0c;这样不需要占用新的空间。两个指针对应节点的值进行比较&#xff0c;那个节点值较小…