Java网络编程之UDP

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

UDP的特征: 数组

  • 不须要创建链接,将数据及相关的地址都封装到数据包中
  • 每一个数据包的大小限制在64k
  • 不须要创建链接,因此效率比较高,正由于不须要链接因此是不可靠协议

Socket 网络

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

Java中使用UDP的步骤 socket

发送端 spa

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

接收端 .net

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

代码案例以下 code

发送端 事务

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
    {
	/*
	 * 一、建立socket服务
	 */
	DatagramSocket socket = new DatagramSocket();
	/*
	 * 二、提供相应的发送=信息
	 */
	byte[] data = "开启udp之旅".getBytes();
	//指明接收端的IP地址,和接收端的端口号
	DatagramPacket packet = new DatagramPacket(data, data.length, 
		InetAddress.getLocalHost(), 10000);
	/*
	 * 三、使用socket的发送方法,进行数据的发送
	 */
	socket.send(packet);
	/*
	 * 四、关闭链接,释放资源
	 */
	socket.close();
    }
}

接收端 ip

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
    {
	/*
	 * 一、建立socket服务
	 * 	须要指明监视的端口号,而且要和发送端指定的接受端口的端口号一致
	 */
	DatagramSocket socket = new DatagramSocket(10000);
	/*
	 * 二、构建DatagramPacket packet用于接收数据
	 * 	packet只是为了接受数据,因此只须要指明字节数组和长度就能够
	 */
	byte[] data = new byte[1024];
	DatagramPacket packet = new DatagramPacket(data, data.length);
	/*
	 * 三、经过socket的receive方法将数据封装到packet中
	 */
	socket.receive(packet);//该方法是阻塞
	/*
	 * 四、经过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();
    }
}
相关文章
相关标签/搜索