推荐:Java网络编程汇总
Java网络编程-Socket编程初涉七(UDP协议,简易提供-搜索服务)
提供端
提供端作为接收信息的一方,需要指定一个端口用于数据接收;等搜索端把请求发送过来时,提供端接收请求信息,并且打印请求信息,再简单的回送一条信息即可。
package udp.search;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Provider {
public static void main(String[] args) throws IOException {
System.out.println("Provider Started...");
// 作为接收者,指定一个端口用于数据接收
DatagramSocket ds = new DatagramSocket(2000);
// 构建接收实体
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf , buf.length);
// 接收
ds.receive(receivePack);
// 打印接收到的信息与发送者的信息
// 发送者的IP地址
String ip = receivePack.getAddress().getHostAddress();
// 发送者的端口
int port = receivePack.getPort();
int dataLen = receivePack.getLength();
String data = new String(receivePack.getData() , 0 ,dataLen);
System.out.println("Provider receive form ip:"+ip+" port:"+port+" data:"+data);
// 构建一份回送数据
String responseData = "Receive data with len:" + dataLen;
byte[] responseDataBytes = responseData.getBytes();
// 直接根据发送者构建一份回送数据
DatagramPacket responsePacket = new DatagramPacket(responseDataBytes ,
responseDataBytes.length,
receivePack.getAddress(),
receivePack.getPort());
// 发送信息
ds.send(responsePacket);
// 关闭
System.out.println("Provider Finished...");
ds.close();
}
}
搜索端
搜索端作为搜索方,即请求资源的一方,无需指定端口,让系统分配即可;搜索端发送请求给提供端(需要指定提供端的IP与端口),提供端接收请求后会回送信息,搜索端接收提供端的回送,再打印该回送即可。
package udp.search;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Searcher {
public static void main(String[] args) throws IOException {
System.out.println("Searcher Started...");
// 作为搜索方,无需指定端口,让系统分配
DatagramSocket ds = new DatagramSocket();
// 构建一份请求数据
String requestData = "Hello World";
byte[] requestDataBytes = requestData.getBytes();
// 直接构建packet
DatagramPacket requestPacket = new DatagramPacket(requestDataBytes ,
requestDataBytes.length);
// 本地地址
requestPacket.setAddress(InetAddress.getLocalHost());
// 端口2000
requestPacket.setPort(2000);
// 发送信息
ds.send(requestPacket);
// 构建接收实体
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf , buf.length);
// 接收
ds.receive(receivePack);
// 打印接收到的信息与发送者的信息
// 发送者的IP地址
String ip = receivePack.getAddress().getHostAddress();
// 发送者的端口
int port = receivePack.getPort();
int dataLen = receivePack.getLength();
String data = new String(receivePack.getData() , 0 ,dataLen);
System.out.println("Searcher receive form ip:"+ip+" port:"+port+" data:"+data);
// 关闭
System.out.println("Searcher Finished...");
ds.close();
}
}
测试
先启动提供端,再启动搜索端,不然提供端接收不到信息。
提供端输出:
Provider Started...
Provider receive form ip:192.168.43.214 port:49164 data:Hello World
Provider Finished...
搜索端输出:
Searcher Started...
Searcher receive form ip:192.168.43.214 port:2000 data:Receive data with len:11
Searcher Finished...
这里只是简单的实现一下基于UDP协议该如何进行网络编程。