UDP
2019-07-09 22:33 更新
一、使用udp模拟客户端与服务端收发数据案例: 客户端向服务端发送字符串,服务端接收后打印。 注意:服务端与客户端的不同点是DatagramPacket既可以用于作为发送数据包,也可以用于接收数据包,只不过发送数据包多了服务器ip地址和端口信息。 1.服务端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务端
* 1.创建服务端+接口
* 2.准备接收容器
* 3.封装成包
* 4.接收数据
* 5.分析数据
* 6.释放资源
*/
public class MyServer {
public static void main(String[] args) throws IOException {
//1.创建服务端+接口
DatagramSocket server = new DatagramSocket(8888);
//2.准备接收容器
byte[] container = new byte[1024];
//3.封装成包new DatagramPacket(byte[] buf, int length)用于接收
DatagramPacket packet = new DatagramPacket(container, container.length);
//4.接收数据
server.receive(packet);//会被阻塞住,直到接收到数据。
//5.分析数据
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data, 0, len));
//6.释放资源
server.close();
}
}
2.客户端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 客户端
* 1.创建客户端+端口
* 2.准备数据
* 3.打包(发送的地点及端口)
* 4.发送
* 5.释放
*/
public class MyClient {
public static void main(String[] args) throws IOException {
//1.创建客户端 +端口
DatagramSocket client = new DatagramSocket(6666);
//2.准备数据
String msg = "hello你好!";
byte[] data = msg.getBytes();
//3.打包(发送的地址及端口)
//new DatagramPacket(byte buf[], int offset, int length, SocketAddress address)用于发送
//DatagramPacket(byte buf[], int length, SocketAddress address)用于发送
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));
//4.发送
client.send(packet);//不会被阻塞住,发完就结束,不保证数据一定被接收。
//5.释放
client.close();
}
}
二、使用udp模拟客户端与服务端收发特定数据类型案例: 客户端发送double类型数据,服务端接收double类型数据并打印。 1.服务端
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务端
* 1.创建服务端+接口
* 2.准备接收容器
* 3.封装成包
* 4.接收数据
* 5.分析数据 字节数组-->double
* 6.释放资源
*/
public class MyServer {
public static void main(String[] args) throws IOException {
//1.创建服务端+接口
DatagramSocket server = new DatagramSocket(8888);
//2.准备接收容器
byte[] container = new byte[1024];
//3.封装成包new DatagramPacket(byte[] buf, int length)用于接收
DatagramPacket packet = new DatagramPacket(container, container.length);
//4.接收数据
server.receive(packet);//会被阻塞住,直到接收到数据。
//5.分析数据------------------------------->只有这步做了更改。
double data = convert(packet.getData());
System.out.println(data);
//6.释放资源
server.close();
}
/**
* 字节数组-->double,注意是使用ByteArrayInputStream,当成String传输也可以。
*/
public static double convert(byte[] data) throws IOException {
ByteArrayInputStream bStream = new ByteArrayInputStream(data);
DataInputStream dStream = new DataInputStream(bStream);
//获取数据
double num = dStream.readDouble();
//关闭流
dStream.close();
bStream.close();
return num;
}
}
2.客户端
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 客户端
* 1.创建客户端+端口
* 2.准备数据 double-->字节数组 字节数组输出流
* 3.打包(发送的地点及端口)
* 4.发送
* 5.释放
*/
public class MyClient {
public static void main(String[] args) throws IOException {
//1.创建客户端 +端口
DatagramSocket client = new DatagramSocket(6666);
//2.准备数据--------------------------------->注意只有这步做了更改。
double num = 3.14;
byte[] data = convert(num);
//3.打包(发送的地址及端口)
//new DatagramPacket(byte buf[], int offset, int length, SocketAddress address)用于发送
//DatagramPacket(byte buf[], int length, SocketAddress address)用于发送
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));
//4.发送
client.send(packet);//不会被阻塞住,发完就结束,不保证数据一定被接收。
//5.释放
client.close();
}
/**
* double-->字节数组,注意是使用ByteArrayOutputStream,当成String传输也可以。
*/
public static byte[] convert(double num) throws IOException {
byte[] data = null;
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream dStream = new DataOutputStream(bStream);
//将数据写入ByteArrayOutputStream对象中
dStream.writeDouble(num);
//转化并获取数据
data = bStream.toByteArray();
//关闭流
dStream.close();
bStream.close();
return data;
}
}
以上内容是否对您有帮助:
← 简单的爬虫案例
更多建议: