代码的功能就是构建一个UDP服务器
接口:
客户端给我发送请求 "IP,paraNumber" 向我询问关于某个设备的参数
流程:先做参数检查 1、参数个数,2、参数是否准确
根据要求回答客户端
import java.io.*;
import java.net.*;
public class UDP {
final private static int PARA_PORT = 19999;
final private static int PARA_ERROR = 101;// "para error";
final private static int SUCCESS = 1;
private static UDP _instance;// singleton
private UDP() {
}
public static synchronized UDP getInstance() {
if (_instance == null)
_instance = new UDP();
return _instance;
}
public void sendDataToClient(Object[] sendData, DatagramPacket packet,
DatagramSocket socket) throws IOException {
String sendDataString = String.format("%d,%s,%d,%s",
(Object[]) sendData);
byte buffer[] = sendDataString.getBytes();
// 得到请求的ip地址
InetAddress address = packet.getAddress();
// 得到请求的ip端口
int port = packet.getPort();
// 准备报文
DatagramPacket sent_packet = new DatagramPacket(buffer, buffer.length,
address, port);
// 发送报文
socket.send(sent_packet);
}
public void paraUDPServer() throws Exception {
// 创建UDP的Socket
DatagramSocket socket = new DatagramSocket(PARA_PORT);
while (true) {
// 缓冲字符变量
byte buffer[] = new byte[256];
// 数据包变量
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// 接收数据包
socket.receive(packet);
String recString = new String(packet.getData(), 0, packet
.getLength());
Object[] sendData = new Object[4];
sendData[0] = Integer.valueOf(SUCCESS);
sendData[1] = "";
sendData[2] = "";
sendData[3] = "";
if (recString.indexOf(",") == -1) {
sendData[0] = Integer.valueOf(PARA_ERROR);
sendDataToClient(sendData, packet, socket);
continue;
}
String[] para_rec = recString.split(",");
if (para_rec.length != 2) {
sendData[0] = Integer.valueOf(PARA_ERROR);
sendDataToClient(sendData, packet, socket);
continue;
}
sendData[3] = "corect answer";
sendDataToClient(sendData, packet, socket);
}
}
public static void main(String []argv)
{
Object[] sendData = new Object[4];
sendData[0] = Integer.valueOf(1);
sendData[1] = "172.12.1.2";
sendData[2] = Integer.valueOf(123);
sendData[3] = "testadfaerfa";
String sendDataString = String.format("%d,%s,%d,%s",
(Object[]) sendData);
System.out.println(sendDataString);
}
}