socket监听端口读取端口信息

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);
  
   }
   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值