计算机网络-UDP协议——沐雨先生

实验内容

1.编写并运行UDP server

2.编写并运行UDP client

3.使用Wireshark抓取并分析UDP用户数据报

基本要求

1.了解UDP上server socket与client socket之间的通信过程

2.学会使用Java语言编写UDP socket服务程序

3.学会使用Java语言编写UDP socket客户程序

4.了解UDP用户数据报的首部结构

相关知识

UDP上的服务器server与客户client之间的通信过程,如下图所示。
在这里插入图片描述

Java应用程序建立一个UDP服务器(server)的步骤(可参阅帮助文档)

(1)创建DatagramSocket对象并绑定Socket地址。调用java.net.DatagramSocket类的构造方法,构造方法之一是
public DatagramSocket(int port, InetAddress laddr)
port是端口号,laddr是要绑定的本地地址,其类型是InetAddress。下列语句建立一个DatagramSocket对象,并绑定到(port, ip)。
intport=12345;
String ip=“192.168.1.102”;
DatagramSocket s = new DatagramSocket(port,InetAddress.getByName(ip));
(2)准备一个java.net.DatagramPacket对象,用于存放即将接收的数据报。DatagramPacket类的构造方法之一是
public DatagramPacket(byte[] buf,int length)
此构造方法构造一个DatagramPacket对象,用于存放即将接收包,包的长度是length字节。例如
byte[] bufRecv = new byte[1024];
DatagramPacketpackRecv = new DatagramPacket(bufRecv, 1024);
创建一个名为packRecv的DatagramPacket,长度是1024字节。
(3)调用DatagramSocket的receive方法接收数据报,receive方法头是
public void receive(DatagramPacket p)
接收到的包存放在p中。例如
s.receive(packRecv);
packRecv指向接收到的包,包中包含数据,还包含发送方的IP及端口号等信息。可调用DatagramPacket的getData()方法得到接收到的数据部分,调用DatagramPacket的getAddress()方法得到对方地址,调用DatagramPacket的getPort()方法得到对方端口号。
(4)准备一个java.net.DatagramPacket对象,用于存放即将发送的包。使用DatagramPacket类的下列构造方法
public DatagramPacket(byte[] buf, int length, InetAddressaddress,int port)
例如下面语句
byte[] bufSend = “Hello”.getBytes();
DatagramPacketpackSend = new DatagramPacket(bufSend, bufSend.length, InetAddress.getByName(ip),port);
建立了一个名为packSend的DatagramPacket对象,包中的数据是“Hello”的二进制表
示,包的目的Socket是(ip,port)。
(5)调用DatagramSocket的send方法向对方发送数据,send方法头是
public void send(DatagramPacket p)
例如
s.send(packSend);
(6)传输结束,调用DatagramSocket的close()方法,即s.close()。

Java应用程序建立一个UDP客户的步骤

(1)调用java.net.DatagramSocket构造方法创建DatagramSocket对象,例如,
DatagramSocket s = new DatagramSocket(null);
(2)准备一个java.net.DatagramPacket对象,用于存放即将发送的包。
(3)调用DatagramSocket的send方法向对方发送数据。
(4)准备一个java.net.DatagramPacket对象,用于存放即将接收的包。
(5)调用DatagramSocket的receive方法接收包。
(6)传输结束,调用DatagramSocket的close()方法。

实验步骤

第1部分编写UDP客户和服务程序并运行
本实验建立服务器程序UdpServer.java和UdpClient.java。UdpServer运行后则等待UdpClient请求,UdpClient向UdpServer发送“Hello,world!”,UdpServer接收消息之后将此字符串再发回给UdpClient,UdpClient接收并显示这个消息。

首先进入Dos命令提示符窗口,键入命令
netstat -ano
查看已占用的UDP端口列表。实验程序中UDP服务器使用的端口号不能出现在已占用端口列表中,以确保UDP服务器使用的端口未被使用。

建立一个Java Application项目
打开NetBeans开发环境,在“D:\”盘下建立一个Java Application项目,项目名称是javanetwork,项目所在文件夹是d:\javanetwork。

1.本实验需要在此项目下建立一个名为demo.udp的包,然后在此包下建立服务器程序UdpServer.java,UdpServer运行后则等待客户请求,客户向服务器发送“Hello,world!”,服务器接收之后将此字符串再发回给客户,客户接收并显示这个字符串。参考Java应用程序建立一个UDP服务器的步骤完成编写UdpServer.java,UdpServer开始运行后则等待客户请求。你的UdpServer运行之后等待客户的输出窗口应与下图类似:
在这里插入图片描述
2.参考Java应用程序建立一个UDP客户的步骤,在demo.udp包中建立UDP上的客户程序,命名为UdpClient.java。UdpClient向服务器发送“Hello,world!”,服务器接收之后将此字符串再发回给客户,客户接收并显示这个字符串。你的UdpClient运行后输出窗口内容应与如下截图类似:
在这里插入图片描述
此时UdpServer输出窗口内容与如下截图类似:
在这里插入图片描述

第2部分抓包

A,B两名同学的电脑一组。
1.打开Wireshark程序,开始抓包;
2.A运行UdpServer, B运行UdpCient;
3.程序运行结束后停止抓包。

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

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

相关文章

【C语言基础】:自定义类型(一)--> 结构体

文章目录 一、内置类型与自定义类型1.1 内置类型(基本数据类型)1.2 自定义类型 二、结构体2.1 结构体的声明2.2 结构体变量的创建和初始化2.3 结构体的特殊声明2.4 结构体的自引用 三、结构体内存对齐3.1 对齐规则3.2 为什么存在内存对齐3.3 修改默认对齐…

再见 mysql_upgrade

在数据库管理的世界里,随着技术的不断进步和业务的不断发展,数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统,其版本迭代与功能优化同样不容忽视。 而在这个过程中,升级工具就显得尤为…

如何在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件 Tuxera NTFS for Mac使用教程

当您获得一台新 Mac 时,它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac,您需要一个附加的 NTFS 驱动程序。Tuxera 他可以帮忙实现这一功能! Tuxera可以轻松转换驱动器:无论使用Windows PC还是Mac&…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码(一) 一、手撕ArrayList底层源码 1、概念: ArrayList的底层实现是基于数组的动态扩容结构。 2、思路: 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

Typora for Mac/Win:让Markdown编辑更高效,创作更自由

在数字化时代,文本编辑已成为我们日常生活与工作中的重要环节。Markdown作为一种轻量级标记语言,以其简洁、易读、易写的特性,受到了广大用户的喜爱。而Typora,作为一款专为Markdown设计的文本编辑器,更是让Markdown编…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台,专为专业投资者提供高速行情及交易系统,旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场,可满足不同投资者需求。 基于 XTP 官方 C SDK,DolphinDB 开发了 X…

【SAP2000】在框架结构中应用分布式面板荷载Applying Distributed Panel Loads to Frame Structures

在框架结构中应用分布式面板荷载 Applying Distributed Panel Loads to Frame Structures 使用"Uniform to Frame"选项,可以简单地将荷载用于更多样化的情况。 With the “Uniform to Frame” option, loads can be easily used for a greater diversity of situat…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式,旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度,减少人工测试的工作量和测试成本。在 Web 自动化测试中,技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

Fastjson配置消息转换器(时间格式问题)

问题: 我们可以看见,日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型,默认是由java的Jackson来处理,使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法,例如&…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决: 方法一:①查询指定条件;②根据查询出的指定条件结果在执行…

conda配置完整的pytorch虚拟环境

新建环境 conda create -n py38 python3.8虚拟环境中安装CUDA,conda安装的cudatoolkit和NVIDIA提供的CUDA Toolkit不一样,前者是系统CUDA的子集。在虚拟环境中安装了cudatoolkit,则pytorch就会用虚拟环境中的cudatoolkit进行编译。注意cudato…

Centos安装部署

Centos安装部署 linux安装JDK 下载地址:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html 创建文件夹,输入命令: mkdir /usr/local/jdk 查看JDK信息,输入命令: java -version 将下载的…

配置visual studio code 用秘钥远程连接SSH服务器

配置visual studio code 用秘钥远程连接SSH服务器 文章目录 配置visual studio code 用秘钥远程连接SSH服务器简介1. 生成SSH密钥对2. 将公钥添加到Ubuntu服务器3. 将私钥添加到visual studio code的SSH配置文件中 简介 通过SSH密钥认证,用户无需在每次连接时输入密…

C++11 shared_from_this学习

最近学习网络变成发现一些C源码库中封装对象时会公有继承enable_shared_from_this&#xff1b; 用一个案例进行说明&#xff0c;案例代码如下&#xff1a; #include <iostream> #include <memory> #include <stdio.h>using namespace std;class C : public…

谈一谈BEV和Transformer在自动驾驶中的应用

谈一谈BEV和Transformer在自动驾驶中的应用 BEV和Transformer都这么火&#xff0c;这次就聊一聊。 结尾有资料连接 一 BEV有什么用 首先&#xff0c;鸟瞰图并不能带来新的功能&#xff0c;对规控也没有什么额外的好处。 从鸟瞰图这个名词就可以看出来&#xff0c;本来摄像头…

啥是MCU,MCU科普

啥是MCU&#xff0c;MCU科普 附赠自动驾驶学习资料和量产经验&#xff1a;链接 MCU是Microcontroller Unit 的简称&#xff0c;中文叫微控制器&#xff0c;俗称单片机&#xff0c;是把CPU的频率与规格做适当缩减&#xff0c;并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…

剑指Offer题目笔记21(计数排序)

面试题74&#xff1a; 问题&#xff1a; ​ 输入一个区间的集合&#xff0c;将重叠的区间合并。 解决方案&#xff1a; ​ 先将所有区间按照起始位置排序&#xff0c;然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并&#xff0c;然后判断合并…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

再次加深理解Java中的并发编程

目录 一、线程、进程、程序 二、线程状态 三、线程的七大参数 四、lock与synchronized锁机制 一&#xff09;、lock与synchronized锁区别 二&#xff09;、synchronized锁原理 三&#xff09;、Lock锁原理 五、synchronized锁升级原理 一&#xff09;、锁升级基础知识 …

AIGC重塑金融:AI大模型驱动的金融变革与实践

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-tVrfBkGvUD0Qi13F {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…