

发送
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {
/*
* udp协议发送端
* 1:创建发送端的套接字 DatagramSocket
* 2:写数据
* 3:数据打包
* 4:发送数据包 (通过套接字发送)
* 5:关闭套接字
*
*/
public static void main(String[] args) throws IOException {
//1:创建发送端的套接字 DatagramSocket
DatagramSocket ds = new DatagramSocket();
//2:创建数据
byte[] by = "Hello udp".getBytes();
//数据长度
int length = by.length;
//远程IP
InetAddress address = InetAddress.getByName("192.168.3.134");
//远程端口号
int port = 10086;
//3:创建数据包 并且打包数据
DatagramPacket dp = new DatagramPacket(by, length, address, port);
//4:发送数据包 DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。
ds.send(dp);
// 5:关闭套接字
ds.close();
}
}
接收
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Arrays;
/*
* udp协议接收端
* 1:创建接收端的套接字
* 2:接受发送端发来的数据包
* 3:拆包
* 4:读取内容
* 5:关闭套接字
*
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//1:创建接收端的套接字 指定端口号
DatagramSocket ds = new DatagramSocket(10087);
//2:创建空数据包
byte[] by = new byte[1024];
int length = by.length;
DatagramPacket dp = new DatagramPacket(by, length);
//3 接受发送端发来的数据把数据封装到数据包中
ds.receive(dp); //阻塞式方法
//4:拆分数据包
byte by2[] =dp.getData(); //获取数据
int len = dp.getLength();//获取数据的实际长度
InetAddress address = dp.getAddress();//获取发送端的ip
String hostName = address.getHostName();
//5 读取数据
String info = new String(by2,0,len);
System.out.println(hostName+"发送的数据是:"+info);
//6:关闭套接字
ds.close();
}
}
优化版
发送
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/*
* 通过键盘录入数据,一直发送,直到录入886的时候,结束
*
*/
public class SendDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1:创建发送端的套接字
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
//2:创建数据包
while(true){
String info = sc.nextLine();
byte[] by = info.getBytes();
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("192.168.3.255"), 12306);
//3:发送数据包
ds.send(dp);
//结束
if("886".equals(info)){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//4:关闭套接字
ds.close();
}
}
}
接收
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ReceieDemo {
public static void main(String[] args) throws IOException {
//1:创建接收端的套接字 指定端口号
DatagramSocket ds = new DatagramSocket(12306);
while(true){
byte[] by = new byte[1024];
//2:创建空数据包
DatagramPacket dp = new DatagramPacket(by, by.length);
//3:接收数据,把数据封装到数据包中
ds.receive(dp);
//4:拆封数据包
int length = dp.getLength();//获取数据的实际长度
String info = new String(dp.getData(),0,length);//获取数据
InetAddress address = dp.getAddress();//获取发送端的ip
String ip = address.getHostAddress();
System.out.println("来自:"+ip+"发送的数据是:"+info);
//5:关闭套接字
//ds.close();
}
}
}