import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
public class ListenPort extends ServerSocket {
//入口地磁第一次接收到的車輛個數
int inNumF =0;
//入口地磁第二次接收到的車輛個數
int inNumS = 0;
//出口地磁第一次接收到的車輛個數
int outNumF = 0;
//出口地磁第二次接受到的車輛個數
int outNumS = 0;
private String data1;
//把擷取的16進制數組轉換為字元串
private static final String HEX_CODE = "0123456789ABCDEF";
public static String byteArrayToHexString(byte[] bs) {
int _byteLen = bs.length;
StringBuilder _result = new StringBuilder(_byteLen * 2);
for (int i = 0; i < _byteLen; i++) {
int n = bs[i] & 0xFF;
_result.append(HEX_CODE.charAt(n >> 4));
_result.append(HEX_CODE.charAt(n & 0x0F));
}
return String.valueOf(_result);
}
class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket s) throws IOException {
this.socket = s;
start();
}
//根據地磁編号擷取目前地磁的車輛計數
public int getCarNum(String diCiNum){
String Info = data1.substring(data1.indexOf(diCiNum),data1.indexOf(diCiNum)+16);
String carNum = Info.substring(14,16);
int number = Integer.parseInt(carNum, 16);
return number;
}
public void run(){
try {
while(true){
BufferedInputStream bis=new BufferedInputStream(socket.getInputStream());
byte[] data = new byte[1024];
int len = bis.read(data);
if(len>0){
data1 = byteArrayToHexString(Arrays.copyOf(data, len));
if(data1.contains("17E8")||data1.contains("17F0")){
inNumS = this.getCarNum("17E8");
outNumS = this.getCarNum("17F0");
System.out.println("=inNumS="+inNumS+"=outNumS="+outNumS+"=inNumF="+inNumF+"=outNumF="+outNumF);
if(inNumF > inNumS && outNumF<outNumS){
getParking.inCarNumber= 255-inNumF+outNumS+1;
getParking.outCarNumber = outNumS - outNumF;
}else if(inNumF > inNumS && outNumF>outNumS){
getParking.inCarNumber= 255-inNumF+outNumS+1;
getParking.outCarNumber = 255 -outNumF + outNumS+1 ;
}else if(inNumF < inNumS && outNumF>outNumS){
getParking.inCarNumber= inNumS - inNumF;
getParking.outCarNumber = 255 - outNumF+outNumS+1;
}else{
getParking.inCarNumber= inNumS - inNumF;
getParking.outCarNumber = outNumS - outNumF;
}
getParking.parkCarNum = getParking.parkCarNum- getParking.inCarNumber + getParking.outCarNumber;
inNumF = inNumS;
outNumF = outNumS;
System.out.println("=inNumF="+inNumF+"=inNumS="+inNumS+"=outNumF="+outNumF+"=outNumS="+outNumS);
System.out.println(data1+"===地磁資訊==="+getParking.inCarNumber+"===="+getParking.outCarNumber);
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public ListenPort(int serverPort) throws IOException, InterruptedException {
// 用指定的端口構造一個ServerSocket
super(serverPort);
try {
while (true) {
System.out.println("開始監聽端口");
// 監聽一端口,等待客戶接入
Socket socket = accept();
// 将會話交給線程處理
new ServerThread(socket);
}
}
catch (Exception e) {
e.printStackTrace();
} finally{
close();
}
}
public static void main(String args[]) throws Exception{
new ListenPort(7654);
}
}