设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

Java网络编程之UDP

2016-04-04 16:43:10.0 java  
导读:本文学-无止境给大家介绍 Java网络编程之UDP。 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open Syst。。。

 UDP User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768UDP的正式规范。

UDP的特征:

  • 不需要建立连接,将数据及相关的地址都封装到数据包中
  • 每个数据包的大小限制在64k
  • 不需要建立连接,所以效率比较高,正因为不需要连接所以是不可靠协议

Socket

  • Socket就是为网络服务提供的一种机制
  • 通信的两端都有Socket
  • 网络通讯其实就是Socket通信
  • 数据在两个Socket间进行传输

Java中使用UDP的步骤

发送端

  1. 建立UDP的socket服务
  2. 封装数据包(指明接收端的IP地址,和接收端的端口号)
  3. 通过socket的Send()发送数据
  4. 关闭服务

接收端

  1. 创建socket服务(需要指明监视的端口号,并且要和发送端指定的接受端口的端口号一致)
  2. 定义数据包用于接收数据(构建DatagramPacket packet用于接收数据)
  3. 通过socket的Receiver()接受数据
  4. 通过packet提供的相应方法获取发送端发送的信息
  5. 关闭服务

代码案例如下

发送端

package cc.enfp.socket.udp;

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

/*
 * UDP 发送端程序
 */
public class SendTest
{
    public static void main(String[] args) throws IOException
    {
	/*
	 * 1、创建socket服务
	 */
	DatagramSocket socket = new DatagramSocket();
	/*
	 * 2、提供相应的发送=信息
	 */
	byte[] data = "开启udp之旅".getBytes();
	//指明接收端的IP地址,和接收端的端口号
	DatagramPacket packet = new DatagramPacket(data, data.length, 
		InetAddress.getLocalHost(), 10000);
	/*
	 * 3、使用socket的发送方法,进行数据的发送
	 */
	socket.send(packet);
	/*
	 * 4、关闭连接,释放资源
	 */
	socket.close();
    }
}

接收端

package cc.enfp.socket.udp;

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

/*
 * UDP 接收端
 */
public class ReceiveTest
{
    public static void main(String[] args) throws Exception
    {
	/*
	 * 1、创建socket服务
	 * 	需要指明监视的端口号,并且要和发送端指定的接受端口的端口号一致
	 */
	DatagramSocket socket = new DatagramSocket(10000);
	/*
	 * 2、构建DatagramPacket packet用于接收数据
	 * 	packet只是为了接受数据,所以只需要指明字节数组和长度就可以
	 */
	byte[] data = new byte[1024];
	DatagramPacket packet = new DatagramPacket(data, data.length);
	/*
	 * 3、通过socket的receive方法将数据封装到packet中
	 */
	socket.receive(packet);//该方法是阻塞
	/*
	 * 4、通过packet提供的相应方法获取发送端发送的信息
	 */
	InetAddress ip = packet.getAddress();
	System.out.println("发送端的IP: "+ip.getHostAddress());
	
	//使用String的重载将返回的byte[]类型的内容转换成字符串
	String content = new String(packet.getData(), 0, packet.getLength());
	System.out.println("发送端发送的内容为: "+content);
	/*
	 * 5.关闭连接,释放资源
	 */
	socket.close();
    }
}



 

(编辑: 学-无止境)

网友评论
相关文章