Java网络多线程——UDP编程
创始人
2024-04-23 23:55:19
0

UDP编程通信

基本介绍

  1. 类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。
  2. UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能安全送到目的地,也不确信什么时候可以抵达。
  3. DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
  4. UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。

基本流程

  1. 核心的两个类/对象DatagramSocket域DatagramPacket
  2. 建立发送端,接收端。
  3. 建立数据包
  4. 调用DatagramSocket的发送、接收方法
  5. 关闭DatagramSocket。

UDP网络编程原理示意图

在这里插入图片描述
UDP说明:

  • 没有明确的服务端和客户端,演变成数据的发送端和接收端。
  • 接收数据和发生数据是通过DatagramSocket对象完成。
  • 将数据封装到DatagramPacket对象/装包。
  • 当接收到DatagramPacket对象,需要进行拆包,取出数据
  • DatagramSocket可以指定在哪个端口接收数据。
package com.study.srv.demo18;import java.io.IOException;
import java.net.*;/*** @author Wen先森* @version 1.0* @date 2022/7/18 14:03* UDP发送端*/
public class Demo11 {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象,准备发送和接收数据,在9998端口接收DatagramSocket datagramSocket = new DatagramSocket(9998);//2.将需要发送的数据,封装到DatagramPacket对象String s="发送的数据";byte[] buf=s.getBytes();InetAddress ip = InetAddress.getByName("192.168.0.18");//说明:封装的DatagramPacket对象//buf 内容字节数组//buf.length 数据长度//ip 主机(ip)//9999 端口DatagramPacket packet = new DatagramPacket(buf, buf.length, ip, 9999);//发送数据datagramSocket.send(packet);//关闭资源
//        datagramSocket.close();System.out.println("发送完毕");//发送端变为接收端接收数据byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength();byte[] data = datagramPacket.getData();String string = new String(data, 0, length);System.out.println(string);datagramSocket.close();System.out.println("接受结束");}
}
package com.study.srv.demo18;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*** @author Wen先森* @version 1.0* @date 2022/7/18 14:03*UDP接收端*/
public class Demo10 {public static void main(String[] args) throws IOException {//1.创建一个 DatagramSocket对象,准备在9999接收数据DatagramSocket datagramSocket = new DatagramSocket(9999);//2.构建一个DatagramPacket 对象,准备接收数据//在UDP协议,一个数据包最大64kbyte[] buf=new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);//3.接收方法 将通过网络传输的DatagramPacket对象填充到packet里去。System.out.println("接收端等待接收");datagramSocket.receive(packet);//4.可以对packet进行拆包,取出数据,并显示//实际接收到的数据字节长度int length = packet.getLength();//实际接收到的数据byte[] data = packet.getData();String string = new String(data, 0, length);System.out.println(string);//5.关闭资源
//        datagramSocket.close();System.out.println("接收结束");//接收端变为发送端,发送数据String s="接收端变为发送端,发送数据";byte[] bytes=s.getBytes();DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.18"), 9998);datagramSocket.send(datagramPacket);datagramSocket.close();System.out.println("发送完毕");}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...