Java UDP协议发送端和接收端
类 Socket
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
构造方法摘要 |
|
|
Socket() |
|
Socket(InetAddress address, int port) |
UDP传输
DatagramSocket与DatagramPacket
建立发送端,接收端
建立数据包
调用Socket的发送接收方法
关闭Socket
发送端与接收端是两个独立的运行程序。
类 DatagramSocket
此类表示用来发送和接收数据报包的套接字。数据报套接字是包投递服务的发送或接收点。
构造方法摘要 |
|
|
DatagramSocket() |
|
DatagramSocket(int port) |
方法摘要 |
|
void |
receive(DatagramPacket p) |
void |
send(DatagramPacket p) |
void |
bind(SocketAddress addr) |
void |
close() |
类 DatagramPacket
此类表示数据报包。
数据报包用来实现无连接包投递服务。
构造方法摘要 |
接收
|
DatagramPacket(byte[] buf, int length) |
|
DatagramPacket(byte[] buf, int offset, int
length) |
发送
|
DatagramPacket(byte[] buf, int length, InetAddress address, int port) |
|
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) |
|
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) |
|
DatagramPacket(byte[] buf, int length, SocketAddress address) |
常用方法
getAddress() |
|
int |
getPort() |
byte[] |
getData() |
int |
getLength() |
发送端
UDPSendDemojava
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSendDemo { public static void main(String[] args) throws IOException { /** * 创建UDP传送的发送端 * 思路: * 1,建立udp的socket服务。 * 2,将要发送的数据封装到数据包中。 * 3,通过udp的socket服务将数据包发送出去 * 4,关闭socket服务 */ // 1,udpsocket服务。使用DategramSocket对象。 DatagramSocket ds = new DatagramSocket(); // 2,将要发送的数据封装到数据包中。 String str = "UDP传送演示:哥们来了"; // 使用DatagramPacket将数据封装到该对象中。 byte buf[] = str.getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"), 10000); // 3,通过udp的socket服务将数据包发送出去,使用send方法 ds.send(dp); // 4,关闭资源 ds.close(); } }
发送端
UDPReceiveDemo.java
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceiveDemo { public static void main(String[] args) throws IOException { System.out.println("接收端启动。。。"); /** *建立UDP接收端的思路 *1,建立UDP Socket服务,因为是接收端,必须要明确一个端口 *2,创建数据包,用于存储接收的数据,方便数据包对象的方法解析这些数据 *3,使用Socket服务的receive方法将接收的数据存储到数据包中 *4,通过数据包的方法解析数据包中的数据 *5,关闭资源 */ // 1,建立UDP Socket服务 DatagramSocket ds = new DatagramSocket(3693); // 2,创建数据包 byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); // 3,使用接收方法将数据存储到数据包中 ds.receive(dp);// 阻塞式 // 4,通过数据包对象的方法,解析其中的数据,比如,地址,端口 String ip = dp.getAddress().getHostAddress(); int port = ds.getPort(); String msg = new String(dp.getData(), 0, dp.getLength()); System.out.println(ip + "," + port + "," + msg); ds.close(); } }