java 25 - 4 网络编程之 UDP协议传输思路

UDP传输

两个类:DatagramSocket与DatagramPacket(具体看API)

  A:建立发送端,接收端。

  B:建立数据包。

  C:调用Socket的发送接收方法。

  D:关闭Socket。

  E:发送端与接收端是两个独立的运行程序。

UDP传输-发送端思路

  UDP发送数据:
    A:创建Socket发送端对象
    B:创建数据报包(把数据打包)
    C:调用Socket对象发送数据报包
    D:释放资源(底层是IO流)

UDP传输-发送端代码

 1 public static void main(String[] args) throws IOException {
 2         // A:创建发送端Socket对象
 3         // DatagramSocket():此类表示用来发送和接收数据报包的套接字。
 4         DatagramSocket ds = new DatagramSocket();
 5
 6         // B:创建数据,并把数据打包
 7         // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 8         // 创建数据
 9         byte[] bys = "UDP发送端".getBytes();
10         // 数据长度
11         int length = bys.length;
12
13         // 创建IP地址对象
14         InetAddress address = InetAddress.getByName("172.19.xx.xx");
15
16         // 创建端口
17         int port = 10010;
18
19         //把数据进行打包
20         DatagramPacket dp = new DatagramPacket(bys,length,address,port);
21
22         // C:调用Socket对象的发送方法发送数据包
23         // public void send(DatagramPacket p) 数据报包用来实现无连接包投递服务
24         ds.send(dp);
25
26         //D:释放资源
27         ds.close();
28     }
29
30 }

UDP传输-接收端思路

  UDP接收数据:
    A:创建Socket接收端对象
    B:创建一个数据报包来接收数据(创建容器)
    C:调用Socket对象的方法来接收数据报包
    D:解析数据包(byte转换成String),并打印在控制台
    E:释放资源

UDP传输-接收端代码

 1 public class ReceiveDemo {
 2     public static void main(String[] args) throws IOException {
 3         // 创建接收端Socket对象
 4         // DatagramSocket(int port)
 5         DatagramSocket ds = new DatagramSocket(10010);
 6
 7         // 创建一个数据包(接收容器)
 8         // DatagramPacket(byte[] buf, int length)
 9         byte[] bys = new byte[1000];
10         int length = bys.length;
11         DatagramPacket dp = new DatagramPacket(bys, length);
12
13         // 调用Socket对象的接收方法接收数据
14         // public void receive(DatagramPacket p)
15         ds.receive(dp); // 阻塞式
16
17         // 解析数据包,并显示在控制台
18         // 获取对方的ip
19         // public InetAddress getAddress()
20         InetAddress address = dp.getAddress();
21         String ip = address.getHostAddress();
22         // public byte[] getData():获取数据缓冲区
23         // public int getLength():获取数据的实际长度
24         byte[] bys2 = dp.getData();
25         int len = dp.getLength();
26         String s = new String(bys2, 0, len);
27         System.out.println(ip + "传递的数据是:" + s);
28
29         // 释放资源
30         ds.close();
31     }
32 }

注意:因为UDP接收端是阻塞式接收,所以先启动接收端,再启动发送端。

UDP协议发送和接收数据的图解:

时间: 2024-10-27 13:39:39

java 25 - 4 网络编程之 UDP协议传输思路的相关文章

java 25 - 4 网络编程之 UDP协议传输的代码优化

UDP协议的输出端: 1 /* 2 UDP发送数据: 3 A:创建Socket发送端对象 4 B:创建数据报包(把数据打包) 5 C:调用Socket对象发送数据报包 6 D:释放资源(底层是IO流) 7 */ 8 public class NewSend { 9 10 public static void main(String[] args) throws IOException { 11 12 // A:创建Socket发送端对象 13 DatagramSocket ds = new Da

黑马程序员【网络编程之UDP协议】

UDP协议 UDP(User Datagram Protocol)也就是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范. 提到无连接数据传输,那我们首先想到的就是不可靠,数据丢失等等,那么在我们的日常软件中,UDP协议到底都应用在什么场景上呢?举一个大家比较熟悉的例子,就是我们平时所用的聊天软件,因为我们的聊天软件所传输的数据并非是重要数据. 通过ip和端口号,我们可以实现一个小的聊天软件,有兴趣的朋友可以在局域网内通过

java 26 - 8 网络编程之 TCP协议上传图片

上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看不懂,所以就用缓冲字节流,只需要把通道内的字节流转换成高效字节流就可以了. 客户端: 1 public class ClineDemo { 2 public static void main(String[] args) throws IOException { 3 4 // 创建Socket对象

java 26 - 8 网络编程之 TCP协议的练习

TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: 1 public class ClientDemo { 2 public static void main(String[] args) throws IOException { 3 4 // 创建socket对象 5 Socket s = new Socket("172.19.12.233", 10010); 6 7 // 创建键盘输入流,用转换流包装成字符流 8 BufferedReader br = new Bu

java网络编程之UDP实例

package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.length(), b

黑马程序员——Java网络编程之UDP传输

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S

网络编程之UDP编程

网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送和接受数据报.值得注意的是:UDP编程必须先由客户端发出信息.一个客户端就是一封信,Socket相当于美国式邮筒(信件的收发都在一个邮筒中).端口与协议相关,所以TCP的30

[深入浅出WP8.1(Runtime)]Socket编程之UDP协议

13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只传送少量数据.对可靠性要求不高的应用环境.既然 UDP 是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用.因为UDP具有TCP所望尘莫及的速度优势.虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受

Java:网络编程之UDP的使用

java.net 类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net 类 DatagramPacket 此类表示数据报包,数据报包用来实现无连接包投递服务. <1> void send(DatagramPacket p) 从此套接字发送数据报包. DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为