【Java】---网络编程:基于UDP协议的网络通信

news/2024/5/18 13:38:46 标签: 网络, java, udp

【Java】—网络编程:基于UDP协议的网络通信


文章目录

  • 【Java】---网络编程:基于UDP协议的网络通信
  • 一、UDP协议
    • 1.1 概念
  • 二、基于UDP协议的Socket编程
    • 2.1 基于UDP协议的单向通信
      • 2.1.1 接收方
      • 2.1.2 发送方
    • 2.2 基于UDP协议的聊天室
      • 2.2.1 接收方
      • 2.2.2 发送方
  • 总结


一、UDP协议

1.1 概念

UDP协议(User Datagram Protocol),即用户数据报协议,是一种无连接的,不可靠的,基于数据报的传输层通信协议。每个数据报的大小为65KB
UDP协议的传输效率比TCP协议高,适合广播发送
使用UDP协议的通信双方分别为接收方发送方,两者地位相等。


二、基于UDP协议的Socket编程

2.1 基于UDP协议的单向通信

DatagramSocket(数据报套接字)是Java中用于实现基于UDP协议的网络编程的套接字类。
可以用于在网络上发送和接收UDP数据。

2.1.1 接收方

  1. 创建DatagramSocket对象,并指定本机的端口号。
java">DatagramSocket ds = new DatagramSocket(6666);
  1. 创建接收数据报包。
java">byte[] buf = new bytep[1024 * 64];//65KB
DatagramPacket dp = new DatagramPacket(buf,buf.length);//指定接收的数组和其长度
  1. 接收数据。
java">System.out.println("准备接收...");
ds.receive(dp);//reveive是阻塞方法,除非接收到数据,否则不会执行
  1. 处理数据。
java">String data = new String(dp.getData(),0,dp.getLength());
System.out.println("接收到数据:" + data);
  1. 关闭。
java">ds.close();

2.1.2 发送方

  1. 创建DatagramSocket对象,不指定端口号,即随即绑定一个端口号。
java">DatagramSocket ds = new DatagramSocket();
  1. 创建发送数据报包
java">String s = "你好啊";
DatagramPacket dp = new DatagramPacket(s.getBytes(),//发送的数据
									   s.getBytes().length,//数据长度
									   InetAddress.getByName("10.9.48.155"),//对方的IP地址
									   6666);//对方端口号

  1. 发送数据
java">ds.send(dp);
  1. 关闭
java">ds.close();

2.2 基于UDP协议的聊天室

2.2.1 接收方

  1. 创建DatagramSocket对象,并指定端口号。
java">DatagramSocket ds = new DatagramSocket(8888);
  1. 创建接收数据报包。
java">byte[] b = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(b,b.length);//规定数据报包的大小
  1. 接收数据并处理
java">while(true){
	ds.receive(dp);
	String data = new String(dp.getData());
	System.out.println(dp.getAddress() + "说:" + data);
}

2.2.2 发送方

  1. 创建DatgramSocket对象,不指定端口号,即随机绑定一个端口号。创建Scanner对象
java">DatagramSocket ds = new DatagramSocket();
Scanner input = new Scanner(System.in);
  1. 循环输入数据,创建发送数据报包,直到输入over才结束
java">while(true){
	String data = input.next();
	DatagramPacket dp = new DatagramPacket(data.getBytes(),//数据
										   data.getBytes().length,//数据长度
										   InetAddress.getByName("10.9.48.255"),//广播地址,所有人可见
										   8888);//同一端口号
	ds.send(dp);//发送数据报包
	if(data == "over")
		break;
}
  1. 关闭
java">ds.close();

总结

今天的文章讲解了UDP协议,以及基于UDP协议实现的通信和聊天室。


http://www.niftyadmin.cn/n/5342142.html

相关文章

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后,会在目录下生成如下内容:进入里面,选择.git,要上传的内容(资料或代码复制到该目录下):…

如何在WordPress中使用 AI 进行 SEO(12 个工具)

您想在 WordPress 中使用 AI 进行 SEO 吗? 人工智能正在对 SEO 行业产生重大影响。已经有优秀的人工智能 SEO 工具,您可以使用它们来提高您的 SEO 排名,而无需付出太多努力。 在本文中,我们将向您展示如何通过我们精心挑选的工具…

Golang 关于反射机制(一文了解)

前言: Golang 反射比 C RTTI 要强大的多,但是比 .NET C#/VB/C 来说,它大约属于低阶反射支持的范畴。 但是 Golang 语言提供了相对强大的反射。 它总要比没有提供易用反射支持的要好的多,C 之中我们基本只能依赖模板、宏通过元编…

Linux之权限(内容详细,细节满满)

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞,评论,收藏。 一起努力 目录 一.前言 二.权限修改的两种方法 …

透明拼接屏代工:专业制造与质量保证

透明拼接屏代工是指专业的代工厂家根据客户的需求,为其生产透明拼接屏产品。随着透明拼接屏市场的不断扩大,越来越多的企业选择通过代工方式快速进入市场。尼伽小编将深入探讨透明拼接屏代工的优势、选择合适的代工厂家以及质量保证等方面的内容。 一、透…

C++ 20 Module

头文件包含一直是C/C的传统,它使代码声明与实现分离,但它有一个非常大的问题就是会被重复编译,拖累编译速度。 通常一个标准头文件iostream展开后可能达几十万甚至上百万行。笔者使用下面的示例进行测试,新建一个main.cc&#xf…

element plus表格的表头和内容居中

文章目录 需求分析 需求 对于 element-plus 中的 table 进行表头和内容的居中显示 分析 单列的表头和内容居中 &#xff1a; 在对应的那一列加上align“center” 即可 <el-table-column prop"name" label"商品名称" align"center" />…

C++函数重载:解密性质、使用方法、特点与语法

函数重载是C中让你能够创建同名函数&#xff0c;但参数类型或个数不同的机制&#xff0c;它为我们提供了更加灵活的编程方式。 一、函数重载的性质 函数重载是指在同一作用域内&#xff0c;可以定义多个同名函数&#xff0c;这些同名函数的参数列表必须不同&#xff0c;包括参…