欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于UDP协议发送和接收信息的简单Java实例

程序员文章站 2022-03-04 20:46:28
...

今天我们就来介绍一下基于UDP协议下的发送和接收信息的Java小程序(测试用例)。

说起UDP 协议,大家肯定能立马想到TCP协议,的确,当下来讲,两者是相对来说较为主流的,但是二者又存在着区别,所以今天写两篇博客来简单记叙一下自己的所学,如有不当,请大家批评指正。

二者的区别和联系大家可以点击查看【网络协议】TCP/IP协议与UDP协议的区别

我们在这里只作简单概述,在我看来,最大的区别就在于是否需要建立联系,UDP是将数据打包抛出,接收方根据相应端口进行接收,而TCP则需要建立连接,当然,没有端口也建立不了连接,那是否说明两者就是不同的呢?当然不是,UDP正是因为他无需建立连接,所以可以直接把数据扔出去,谁想要谁要,安全性是不高的,但是实现起来倒是相对来说简单一些的,下面我们就来看一下基于UDP的数据传输。

在这里我们主要从发送方和接收方来分析实现原理:

  发送方:

  1、用到Socket(套接字),创建发送端Socket对象

  2、创建数据并打包

  3、发送数据

  4、释放资源

记下来我们直接看代码的实现过程:

package com.zzxtit.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
*author 秦飞阳
*/

public class SendDemo {
	
	public static void main(String[] args) throws IOException{
		
		// 1、用到Socket(套接字),创建发送端Socket对象

		DatagramSocket ds = new DatagramSocket();
		
		// 2、创建数据并打包
		String s = "hello hdp";
		
		byte[] bys = s.getBytes();
		
		int length = bys.length;
		
		InetAddress address = InetAddress.getByName("manxiaoyu");
		
		int port  = 8888 ;
		
		DatagramPacket dp = new DatagramPacket(bys, length,address,port);
		// 3、发送数据
		ds.send(dp);
		// 4、释放资源
		ds.close();
		
	}

}

接收方:

  1、创建接收端Socket对象

  2、接收数据

  3、解析资源

  4、输出数据

  5、释放资源

同样我们再用代码进行实现:

package com.zzxtit.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
*author 秦飞阳
*/

public class ReceiveDemo {
	
	public static void main(String[] args) throws IOException {
		
		//  1、创建接收端Socket对象


		DatagramSocket ds = new DatagramSocket(8888);
//		  2、接收数据


		byte[] bys  = new byte[1024];
		DatagramPacket dp = new DatagramPacket(bys,bys.length);
		
		ds.receive(dp);
//		  3、解析资源


		InetAddress address = dp.getAddress();
		byte[] data = dp.getData();
		int length  = dp.getLength();
//		  4、输出数据

		System.out.println(address.getHostAddress());
		System.out.println(new String(data));

//		  5、释放资源
		ds.close();	
	}
}

因为这个相对来说比较简单,所以不做过多的解释,在最后总结几点注意事项:

1、端口号错误,可以正常发出数据,但是却无法接收

2、重复运行会导致cannot bind 的错误,这是因为上次运行的端口号正在使用,无法让当前程序使用此端口号

3、创建的Socket对象是由DatagramSocket这个类完成的,这是UDP和TCP所不同的一点所在

4、注意端口号的使用与系统程序或软件程序的端口号冲突

相关标签: UDP