网页上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;}elsereturn 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 blocke.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 blocke.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.936916while(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;@Overridepublic 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 25364861String 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
?
以上很初略的代码。