网页上Applet用javacomm20读取客户端串口


public class SerialHandleBean implements SerialPortEventListener
{
	CommPortIdentifier portId;
	SerialPort serialPort;
	private OutputStream out;
	private InputStream in;
	String Buf=null;// 缓存一条最新信息
	boolean hasData=false;// 标志有无新数据
	Thread readThread;
	static { 
		System.setSecurityManager(null);
	}
	private static SerialHandleBean serialBean=new SerialHandleBean();
	private SerialHandleBean()
	{
		
	}
	public static SerialHandleBean getInstance(){
		if (serialBean==null) {
			return new SerialHandleBean();
		}else{
			return serialBean;
		}
	}

	public int initialize(String portName, int baud) {
		int InitSuccess = 1;
		int InitFail = -1;

		try {
			portId = CommPortIdentifier.getPortIdentifier(portName);
			serialPort = (SerialPort) portId.open(portId.getName(), 1000);
			
			serialPort.addEventListener(this);
			serialPort.notifyOnDataAvailable(true);
			serialPort .notifyOnBreakInterrupt(true);
			in = serialPort.getInputStream();
			out = serialPort.getOutputStream();
			serialPort.setSerialPortParams(baud, SerialPort.DATABITS_8,
			SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
			
		} catch (PortInUseException e) {
			System.out.println("端口已经被占用!");
			e.printStackTrace();
			return InitFail;
		} catch (TooManyListenersException e) {
			System.out.println("端口监听者过多!");
			e.printStackTrace();
			return InitFail;
		} catch (UnsupportedCommOperationException e) {
			System.out.println("端口操作命令不支持!");
			e.printStackTrace();
			return InitFail;
		} catch (NoSuchPortException e) {
			System.out.println("端口不存在!");
			e.printStackTrace();
			return InitFail;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return InitSuccess;
	}
	
	public boolean hasData()
	{
		return hasData;
	}
	public String ReadPort()
	{
		if(hasData)
		{
			this.hasData=false;
			return this.Buf;
		}
		else
			return null;
	}
	public  void writeln(String command) throws Exception {
		out.write(hexStringToBytes(command));
		out.flush();
	}
	
	public  byte[] hexStringToBytes(String hexString) {  
	    if (hexString == null || hexString.equals("")) {  
	        return null;  
	    }  
	    hexString = hexString.toUpperCase();  
	    int length = hexString.length() / 2;  
	    char[] hexChars = hexString.toCharArray();  
	    byte[] d = new byte[length];  
	    for (int i = 0; i < length; i++) {  
	        int pos = i * 2;  
	        d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));  
	    }  
	    return d;  
	}  
	/** 
	 * Convert char to byte 
	 * @param c char 
	 * @return byte 
	 */  
	 private byte charToByte(char c) {  
	    return (byte) "0123456789ABCDEF".indexOf(c);  
	}  
	 //打印
	 public static void printHexString( byte[] b) {    
		   for (int i = 0; i < b.length; i++) {   
		     String hex = Integer.toHexString(b[i] & 0xFF);   
		     if (hex.length() == 1) {   
		       hex = '0' + hex;   
		     }   
		     System.out.print(hex.toUpperCase() );   
		   }   
		  
		}  
	public void ClosePort()
	{
		if(readThread!=null	)
			try {
				readThread.join();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		if(serialPort!=null)
			serialPort.close();
	}
	public String readResult()
	{
		String buf=null;
		try {
			while(in.available()>0)
			{
				buf=Integer.toHexString(in.read());
			}
			return buf;
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return buf;
	}
	public void serialEvent(SerialPortEvent event) {
		/**
		 * 事件类型:
		 * 
		 * BI -通讯中断.    CD -载波检测.    CTS -清除发送.    DATA_AVAILABLE -有数据到达.   
		 * DSR-数据设备准备好.    FE -帧错误.    OE -溢位错误.    OUTPUT_BUFFER_EMPTY
		 * -输出缓冲区已清空.    PE -奇偶校验错. RI - 振铃指示.
		 */
		switch(event.getEventType())
		{
			case SerialPortEvent.BI:
			case SerialPortEvent.OE:
			case SerialPortEvent.FE:
			case SerialPortEvent.PE:
			case SerialPortEvent.CD:
			case SerialPortEvent.CTS:
			case SerialPortEvent.DSR:
			case SerialPortEvent.RI:
			case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
				break;
			case SerialPortEvent.DATA_AVAILABLE:
				break;
		}
	}
	public OutputStream getOut() {
		return out;
	}

	public void setOut(OutputStream out) {
		this.out = out;
	}

	public InputStream getIn() {
		return in;
	}

	public void setIn(InputStream in) {
		this.in = in;
	}
	//调试用
	/*public static void main(String[] args) throws Exception {
		int i=0;
		SerialHandleBean serialBean=SerialHandleBean.getInstance();
		if (serialBean.initialize("COM1",38400)==1) {
			serialBean.writeln("aa");//22.548272,113.936916
			while(true){
				String result=serialBean.readResult();
				if (result!=null) {
					result=result.toUpperCase();
					if (result.equals("FF")) {
						System.out.println("successed!");
						serialBean.ClosePort();
						break;
					}else if(result.equals("F0")){
						System.out.println("failed!");
						serialBean.ClosePort();
						break;
					}
				}else{
					if (i==10) {
						serialBean.ClosePort();
						break;
					}
					Thread.sleep(1000);
					System.out.println("等待返回数据... "+i+" s");
					i++;
				}
			}
		}else{
			System.out.println("初始化失败!");
		}
	}*/
}
 
public class ListenApplet extends Applet {
	private static final long serialVersionUID = 4886560884272088075L;
	private SerialHandleBean serialBean;
	private String info;
	@Override
	public void init() {
		this.serialBean =SerialHandleBean.getInstance();
		if (serialBean.initialize("COM1",38400)==1) {
			info="Y";
		}else{
			info="N";
		}
	}
	public void paint(Graphics g){
    }
	public String writeSerial(String command){
		int i=0;
		String handleResult="";
		try {
			if (info.equals("Y")) {
				serialBean.writeln(command);
				while (true) {//114022936 25364861
					String result=serialBean.readResult();
					if (result!=null) {
						result=result.toUpperCase();
						if (result.equals("FF")) {
							handleResult="Y";
							System.out.println("successed!");
							serialBean.writeln("55");
							break;
						}else if(result.equals("F0")){
							handleResult="F";
							serialBean.writeln("55");
							System.out.println("failed!");
							break;
						}
					}else{
						if (i==10) {
							System.out.println("无法解码!解除状态!");
							serialBean.writeln("55");
							handleResult="S";
							break;
						}
						Thread.sleep(1000);
						i++;
						System.out.println("listening... "+i+" s");
					}
				}
				return handleResult;
			}else if(info.equals("N")){
				serialBean.ClosePort();
				init();
				System.out.println("未启动");
				return "N";
			}else{
				serialBean.ClosePort();
				init();
				System.out.println("info is null!");
				return "N";
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "N";
	}
	public String readSerial(){
		try {
			String result=serialBean.readResult();
			System.out.println(result);
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "N";
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public SerialHandleBean getSerialBean() {
		return serialBean;
	}
	public void setSerialBean(SerialHandleBean serialBean) {
		this.serialBean = serialBean;
	}
}

 

客户端浏览器需要jre环境

生成证书及签名

请在命令行环境下执行以下的命令:
1、keytool -genkey -keystore command.store -alias command

2、keytool -export -keystore command.store -alias command-file command.cert

3、jarsigner -keystore command.store applet.jar command

修改${java.home}/jre/lib/security目录下的java.security,在下面添写第三行

policy.url.3=file:c: /admin/applet.policy

 

以上很初略的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值