UDP的Java支持
UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能:
1)在IP协议的基础上添加了端口;
2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。

Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器端都通过DatagramSocket的send()方法和receive()方法来发送和接收数据,用DatagramPacket来包装需要发送或者接收到的数据。发送信息时,Java创建一个包含待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket实例的send()方法;接收信息时,Java程序首先创建一个DatagramPacket实例,该实例预先分配了一些空间,并将接收到的信息存放在该空间中,然后把该实例作为参数传递给DatagramSocket实例的receive()方法。在创建DatagramPacket实例时,要注意:如果该实例用来包装待接收的数据,则不指定数据来源的远程主机和端口,只需指定一个缓存数据的byte数组即可(在调用receive()方法接收到数据后,源地址和端口等信息会自动包含在DatagramPacket实例中),而如果该实例用来包装待发送的数据,则要指定要发送到的目的主机和端口。

UDP的通信建立的步骤
UDP客户端首先向被动等待联系的服务器发送一个数据报文。一个典型的UDP客户端要经过下面三步操作:
1. 创建一个DatagramSocket实例,可以有选择地对本地地址和端口号进行设置,如果设置了端口号,则客户端会在该端口号上监听从服务器端发送来的数据;
2. 使用DatagramSocket实例的send()和receive()方法来发送和接收DatagramPacket实例,进行通信;
3. 通信完成后,调用DatagramSocket实例的close()方法来关闭该套接字。
由于UDP是无连接的,因此UDP服务端不需要等待客户端的请求以建立连接。另外,UDP服务器为所有通信使用同一套接字,这点与TCP服务器不同,TCP服务器则为每个成功返回的accept()方法创建一个新的套接字。一个典型的UDP服务端要经过下面三步操作:
1. 创建一个DatagramSocket实例,指定本地端口号,并可以有选择地指定本地地址,此时,服务器已经准备好从任何客户端接收数据报文;
2. 使用DatagramSocket实例的receive()方法接收一个DatagramPacket实例,当receive()方法返回时,数据报文就包含了客户端的地址,这样就知道了回复信息应该发送到什么地方;
3. 使用DatagramSocket实例的send()方法向服务器端返回DatagramPacket实例。

一个程序为服务端,建立UDP服务端套接字。

java源程序如下:

import java.io.IOException;//导入IOException类
import java.net.DatagramPacket;//导入DatagramPacket类
import java.net.DatagramSocket;//导DatagramSocket入
import java.net.InetAddress;//导入InetAddress类
import java.util.Scanner;//导入Scanner类
/** 客户端*/
public class UDPClient {//公共类public static void main(String[] args) throws IOException {//主程序入口/** 向服务器端发送数据*/      InetAddress address = InetAddress.getByName("localhost"); // 1.定义服务器的地址、端口号、数据int port = 8800;//定义端口类型while(true) {//通过循环不同的向客户端发送和接受数据Scanner scanner = new Scanner(System.in);//从键盘接受数据String send = scanner.nextLine();//nextLine方式接受字符串byte[] data = send.getBytes();//将接收到的数据变成字节数组      DatagramPacket packet = new DatagramPacket(data, data.length, address, port);//2.创建数据报,包含发送的数据信息     DatagramSocket socket = new DatagramSocket(); // 3.创建DatagramSocket对象       socket.send(packet);// 4.向服务器端发送数据报/** 接收服务器端响应的数据*/      byte[] data2 = new byte[1024];//创建字节数组 DatagramPacket packet2 = new DatagramPacket(data2, data2.length);// 1.创建数据报,用于接收服务器端响应的数据          socket.receive(packet2);// 2.接收服务器响应的数据//3.读取数据String reply = new String(data2, 0, packet2.getLength());//创建字符串对象System.out.println("我是客户端,服务器说:" + reply);//输出提示信息socket.close();//4.关闭资源}}
}

另外一个程序为客户端,建立UDP客户端套接字。
java源程序如下:

import java.io.IOException;//导入IOException类
import java.net.DatagramPacket;//导入DatagramPacket类
import java.net.DatagramSocket;//导入DatagramSocket类
import java.net.InetAddress;//导入InetAddress类
import java.util.Scanner;//导入Scanner类/** 服务器端,实现基于UDP的用户登陆*/
public class UDPServer {//公共类public static void main(String[] args) throws IOException {//主程序入口/** 接收客户端发送的数据*/      DatagramSocket socket = new DatagramSocket(8800);  // 1.创建服务器端DatagramSocket,指定端口// 2.创建数据报,用于接收客户端发送的数据byte[] data = new byte[1024];//创建字节数组,指定接收的数据包的大小DatagramPacket packet = new DatagramPacket(data, data.length);// 3.接收客户端发送的数据System.out.println("****服务器端已经启动,等待客户端发送数据");//输出提示信息while(true) {//通过循环不停的向客户端发送数据和接收数据socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞// 4.读取数据 String info = new String(data, 0, packet.getLength());//创建字符串对象System.out.println("我是服务器,客户端说:" + info);//输出提示信息    /** 向客户端响应数据*/// 1.定义客户端的地址、端口号、数据    InetAddress address = packet.getAddress();//获取发送端的地址int port = packet.getPort();//获取 发送端进程所绑定的端口  Scanner scanner = new Scanner(System.in);//从键盘接受数据  String send = scanner.nextLine();//nextLine方式接受字符串  byte[] data2 = send.getBytes();//将接收到的数据转换为字节数组DatagramPacket packet2 = new DatagramPacket(data2, data2.length,address,port);// 2.创建数据报,包含响应的数据信息      socket.send(packet2); // 3.响应客户端  } }
}

运行结果如下:

JAVA实现UDP通信相关推荐

  1. java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP...

    无连接通信 UDP 客户端 package com.swift.test;import java.io.IOException; import java.net.DatagramPacket; imp ...

  2. 【JAVA】UDP通信

    目录 1.[UDP通信] 1.1[UDP发送数据] 1.2[UDP接收数据] 1.3[UDP通信--示例项目] 2.[UDP的三种通信方式] 2.1[单播] 2.2[组播] 2.2.1[组播地址] 2 ...

  3. [计算机网络]java 实现 udp 通信发送 16 进制报文

    最近有个项目,需要根据卡号生成韦根信号,然后发送给韦根转换器,再让韦根转换器把我发送的内容解析成韦根信号 用的韦根转换器是这家公司的: 韦根26转网络维根转TCP/网络转韦根26TCP转维根 根据人家 ...

  4. java udp 服务器方_Java的UDP通信的小程序,UDP服务器

    我一直工作在不同的方式来满2编码天做到这一点,我需要一些帮助:Java的UDP通信的小程序,UDP服务器 我想在网上创建Java中的多人游戏.要做到这一点,我需要服务器和小应用程序之间的通信 我的印象 ...

  5. java实现收端和发送端,java实现udp发送端和接收端

    发送端: package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Dat ...

  6. Java学习笔记—UDP通信

    一.UDP通信原理 UDP协议(用户数据报协议 User Datagram Protocol)是一种无连接通信协议, 即在数据传输时数据发送端和接收端不建立逻辑链接.因此UDP协议是一种 不可靠的网络 ...

  7. java -UDP通信

    UDP通信 DatagramPacket 前面介绍了UDP是一种面向无连接的协议,因此,在通信时发送端和接收端不用建立连接.UDP通信的过程就像是货运公司在两个码头间发送货物一样.在码头发送和接收货物 ...

  8. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信

    如今,计算机已经成为人们学习.工作.生活必不可少的工具.人们利用计算机可以和亲朋好友在网上聊天,玩网游或发邮件等,这些功能的实现都离不开计算机网络.计算机网络实现了不同计算机之间的通信,而这些必须依靠 ...

  9. java UDP通信程序DatagramSocket数据发送

    首先 我们先来了解一下 UDP 首先 他是一种不可靠的网络协议 他在通信的两端 各建立一个 Socke对象 但是他们只是 发送和接收数据的对象 发送端只管发送 不会顾及接收端是否接到 接收到只负责接收 ...

  10. Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

    目录 1 网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4 InetAddress的使用 1.5 端口 1.6 协议 2 UDP通信程序 2.1 UDP通信原理 2 ...

最新文章

  1. Xamarin Essentials教程实现数据的传输功能实例
  2. 为什么“或命题真假的判断是有真则真?
  3. 【漫谈数据仓库】 如何优雅地设计数据分层
  4. JZOJ 5268. 旅行
  5. 构建之法阅读笔记之速读篇
  6. AssetBundle系列——共享资源打包/依赖资源打包
  7. SpringCloud Sentinel 使用restTemplate的两种配置介绍
  8. html的document操作
  9. 使用 FUSE 开发自己的文件系统
  10. 提高办公效率的方法-工具篇
  11. python计算器_python_计算器
  12. 度数换算_度的换算(度数换算计算器)
  13. [Android移动安全渗透基础教程] 模拟器篇
  14. 品牌设计与VI设计的不同之处
  15. chromecast 断电重启后时间错误
  16. 就让这大雨全都落下 - 容祖儿
  17. 关于Vue中keep-alive的作用是什么?怎么使用?
  18. 云计算是什么 如何分类 有什么
  19. MYSQL数据库密码的加密方式及破解方法
  20. 疫情来袭,遵义微红科技微商下单系统助力企业转型微商!

热门文章

  1. 2022-2028全球与中国质量管理体系软件市场现状及未来发展趋势
  2. BootDo平台数据库使用Oracle
  3. 统计学基础知识梳理,看这一篇就够了
  4. ac1900 linksys 恢复_linksys思科WRT1900ACS刷机变砖维修
  5. Spring 菜鸟教程 异常 集锦
  6. 全国计算机比赛微课视频,“教学之星”全国总决赛 | 冠军朱琦微课及现场比赛视频...
  7. 国税计算机基础知识,国税系统计算机基础知识培训课件精要.ppt
  8. Linux 系统的安全加固
  9. Windows10上安装EPLAN无法连接虚拟加密狗的解决方法
  10. StringUtil.isEmpty(str)、StringUtil.isNotEmpty(str)和StringUtil.isBlank(str)区别