使用UDP进行网络编程需要两个关键的类:DatagramSocket和DatagramPacket。
DatagramSocket:用于创建发送端或者接收端的套接字,并指定所使用的端口。
DatagramPacket:用于接收或者发送的数据包。
在进行网络编程的过程中一切都是以字节数组为核心的编程,在发送端把字节数组封装成数据包发送给接收端。在接收端把接收的数据包拆封成数据数组,然后在把字节数组进行解析。
发送端基本步骤:
(1)使用DatagramSocket指定端口号,创建发送端套接字
(2)操作数据,转成字节数组
(3)使用DatagrameSocket把字节数组封装成数据包,指定目的地
(4)发送数据包
(5)关闭资源
接收端基本步骤:
(1)使用DatagramSocket指定端口号,创建发送端套接字
(2)准备容器,使用DatagrameSocket接收数据包
(3)把接收的数据包转换成字节数组
(4)分析数据
(5)释放资源
package Net;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 引用类型:接受端
*
* @author zhaoy
*
*/
public class Test04_client {
public static void main(String[] args) throws Exception {
System.out.println("发送端启动中。。。。");
// 使用DatagramStocket 指定端口创建接收端
DatagramSocket client = new DatagramSocket(8888);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(bos));
// 操作数据 转成字节数组
Employee em = new Employee("张杰", 25);
oos.writeObject(em);
oos.flush();
byte[] datas = bos.toByteArray();
// 封装成包指定目的地
DatagramPacket packet = new DatagramPacket(datas, datas.length, new InetSocketAddress("localhost", 9999));
client.send(packet);
client.close();
}
}
package Net;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 引用类型:接收端
*
* @author zhaoy
*
*/
public class Test04_server {
public static void main(String[] args) throws Exception {
System.out.println("接收端启动中。。。");
// 使用DatagramSocket 指定端口 创建接收端
DatagramSocket server = new DatagramSocket(9999);
// 准备容器 使用DatagramSocket接收包
byte[] container = new byte[1024 * 60];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
server.receive(packet);
// 分析数据
byte[] datas = packet.getData();
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
Object em = ois.readObject();
if (em instanceof Employee) {
Employee emo = (Employee) em;
System.out.println("name:" + emo.getName());
System.out.println("age:" + emo.getAge());
}
}
}
package Net;
import java.io.Serializable;
/**
* Javabean
*
* @author zhaoy
*
*/
public class Employee implements Serializable {
private String name;
private int age;
public Employee(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}