package casia.isiteam.netservice.net.core;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class UDPServerThread implements Runnable// 定义一个线程以监听客户发来的数据报
{
private ThreadPool threadPool = new ThreadPool(200); 
private DatagramPacket packet;
private DatagramSocket socket; UDPServerThread() {
try {
socket = new DatagramSocket(2222);
System.out.println("Listening on port: " + socket.getLocalPort());
} catch (Exception e) {
System.out.println("Erro r: " + e);
}
} public void run() {
if (socket == null)
return;
while (true) {
try {
InetAddress address;
int port=1111;
// int length;
// int offset;
// String s = "Your packet is received. ";
byte[] receiveData = new byte[200];
packet = new DatagramPacket(receiveData, receiveData.length); // 生成一个接收数据报
socket.receive(packet); // 接收数据报
receiveData = packet.getData();

String IPAddress = packet.getAddress().getHostAddress();    //上传信号机IP地址 address = InetAddress.getByName(IPAddress);
//如果是故障信息,回复给上传信号机的1111端口三个字节的确认信息
if(receiveData[0] == 6 && receiveData[1] == 19){
byte[] sendData = new byte[3];
sendData[0] = 7;
sendData[1] = 19;
sendData[2] = 0;
packet = new DatagramPacket(sendData, sendData.length, address , port);//将要发送的数据打包
socket.send(packet);
}

DataTask dt = new DataTask();
dt.setData(receiveData);
dt.setIp(IPAddress);
//new Thread(dt).start();
 threadPool.execute(dt);
 System.out.print("收到数据:");
    for(int i=0;i<receiveData.length;i++){
     System.out.print(receiveData[i]+" " );
    }

} catch (Exception e) {
System.out.println("Erro r: " + e);
}
}
} protected void finalize() {
if (socket != null) {
socket.close(); // 关闭socket
System.out.println("Socket Closed. ");
}
}
}class UDPServer {
public static void main(String args[]) {
UDPServerThread server = new UDPServerThread();
Thread t=new Thread(server);
t.start();
}
}