今天我们就来介绍一下基于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、注意端口号的使用与系统程序或软件程序的端口号冲突