package udpdemo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/*
* 发送和接收均可以使用的Sokcet类:
* DatagramSocket
*
* 数据打包的相关类:
* DatagramPacket
*
* UDP发送端完成步骤:
* i.建立发送端。空参构造
* ii.创建数据
* iii.建立数据包。
* public DatagramPacket(byte[] buf, 数据打成的字节数组
int length, 数据的长度
InetAddress address, 目标程序ip地址
int port) 目标程序端口
* iv.调用Socket的发送方法。
* public void send(DatagramPacket p) 发送数据报包
* v.关闭Socket。
*
* pis:发送端与接收端是两个独立的运行程序。
*/
public class UDPSend {
public static void main(String[] args) throws IOException {
//建立发送端
DatagramSocket ds = new DatagramSocket();
//创建数据
String s = "i love java";
//建立数据包
byte[] data = s.getBytes();
int length = data.length;
InetAddress address = InetAddress.getByName("192.168.2.25");
int port = 55555;
DatagramPacket dp = new DatagramPacket(data, length, address, port);
//调用Socket的发送方法
ds.send(dp);
//关闭Socket
ds.close();
}
}
package udpdemo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
* 发送和接收均可以使用的Sokcet类:
* DatagramSocket
*
* 数据打包的相关类:
* DatagramPacket
*
* UDP接收端完成步骤:
* i.建立接收端。public DatagramSocket(int port)指定程序端口号,方便发送端寻找
* ii.建立数据包。用于接收数据
* public DatagramPacket(byte[] buf, int length)
* iii.调用Socket的接收方法。
* public void receive(DatagramPacket p) 接收数据方法
* iv.解析数据
* public byte[] getData() 获取数据报包中的数据
* public int getLength() 获取数据报包中数据的长度
* public InetAddress getAddress() 获取对方的IP
* public int getPort() 获取对方的端口
* v.关闭Socket。
*
* pis:发送端与接收端是两个独立的运行程序。
*/
public class UDPReceive {
public static void main(String[] args) throws IOException {
//建立接收端
DatagramSocket ds = new DatagramSocket(55555);
//建立数据包
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//调用Socket的接收方法
ds.receive(dp);
//解析数据
InetAddress address = dp.getAddress();
String send_ip = address.getHostAddress();
int send_port = dp.getPort();
byte[] data_buf = dp.getData();
int length = dp.getLength();
//将字节数据,组装为字符串
String data = new String(data_buf,0,length);
System.out.println("收到来自"+send_ip+",端口号为"+send_port+"程序的数据:"+data);
//关闭Socket
ds.close();
}
}