发送端
package com.shujia.day20.udpdemo2;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/*
1:建立udp的socket服务
2:将要发送的数据封装成数据包
3:通过udp的socket服务,将数据包发送出
4:关闭资源
*/
public class SendDemo1 {
public static void main(String[] args) throws Exception {
//1. 创建发送端的Socket对象
//DatagramSocket() 创建一个数据报套接字,绑定到指定的本地地址。
DatagramSocket s = new DatagramSocket();
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("输入要发送的信息:");
String info = sc.next();
//2. 将要发送的数据封装成数据包
//DatagramPacket
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
byte[] buf = info.getBytes(); // 要发送的数据内容字节数组形式
int length = buf.length; //字节数组的长度
InetAddress address = InetAddress.getByName("192.168.28.254"); // 目标机器的ip地址的InetAddress对象
int port = 10086; //目标机器程序绑定的端口号
DatagramPacket packet = new DatagramPacket(buf, length, address, port);
//3. 通过udp的socket服务,将数据包发送出
//public void send(DatagramPacket p)
s.send(packet);
if("over".equals(info)){
System.out.println("结束会话...正在关闭发送端");
break;
}
}
//4:关闭资源
s.close();
}
}
接收端
package com.shujia.day20.udpdemo2;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
udp协议接收者编程:
1:建立udp的socket服务.
2:通过receive方法接收数据
3:将收到的数据存储到数据包对象中
4:通过数据包对象的功能来完成对接收到数据进行解析.
5:可以对资源进行关闭
*/
public class ReceiveDemo1 {
public static void main(String[] args) throws Exception {
//1. 创建接收端的Socket对象,并绑定端口号
//DatagramSocket(int port)
//构造数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket s = new DatagramSocket(10086);
//创建一个用于存储接收到的数据的数据包
//DatagramPacket(byte[] buf, int length)
//构造一个 DatagramPacket用于接收长度的数据包 length 。
byte[] bao = new byte[2048];
int length = bao.length;
DatagramPacket packet = new DatagramPacket(bao, length);
while (true){
//2:通过receive方法接收数据
s.receive(packet);
//通过数据包对象的功能来完成对接收到数据进行解析.
//获取数据包中的数据
byte[] data = packet.getData();
//int getLength() 返回要发送的数据的长度或接收到的数据的长度。
int len = packet.getLength();
String info = new String(data, 0, len);
//InetAddress getAddress() 获取发送者的信息
//返回该数据报发送或接收数据报的计算机的IP地址。
InetAddress address = packet.getAddress();
String hostName = address.getHostName();
String ip = address.getHostAddress();
if("over".equals(info)){
System.out.println("***********************************");
System.out.println(hostName + "发送已结束会话....");
System.out.println("***********************************");
break;
}
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
System.out.println("有一条数据来自ip地址为:"+ip);
System.out.println("主机名:" + hostName + ",发来一条消息:" + info);
System.out.println("------------------------------------------------------------------");
}
//关闭资源
s.close();
}
}
标签:协议,udp,DatagramPacket,System,length,new,数据包,out
From: https://www.cnblogs.com/qiwei-bigdata/p/18370257