package com.baidu.socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 发送端
*/
public class SendSocket {
public static void main(String[] args) {
//1.创建发送端套接字对象
DatagramSocket ds=null;
try {
ds=new DatagramSocket();
//2.1发送的数据
byte[] buf="hello server".getBytes();
//2.2发送的数据长度
int length=buf.length;
//2.3拟发送主机地址
InetAddress address=InetAddress.getByName("127.0.0.1");
//2.4拟发送主机端口号
int port=9999;
//2.DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket p=new DatagramPacket(buf,length,address,port);
//oid send(DatagramPacket p) 从此套接字发送数据报包。
ds.send(p);
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭资源
ds.close();
}
}
}
//========================================
package com.baidu.socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 接收端
*/
public class ReceiveSocket {
public static void main(String[] args) {
//1.创建接收端套接字
DatagramSocket ds=null;
try {
ds=new DatagramSocket(9999);
//2.1创建字节数组来接收数据
byte[] buf=new byte[1024];
//2.2接收的字节长度
int length=buf.length;
//2.创建数据数据报包对象DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramPacket p=new DatagramPacket(buf,length);
//3.接收数据
ds.receive(p);
//4.拆包
//4.1获取发送端的地址
String ip=p.getAddress().getHostAddress();
//4.2获取发送端的端口号
int port=p.getPort();
//4.3获取发送端的数据
byte[] data = p.getData();
//String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
String line=new String(data,0,data.length);
System.out.println(ip+": "+port+"发来信息:"+line);
} catch (Exception e) {
e.printStackTrace();
}finally{
ds.close();
}
}
}