首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-22 
网页上Applet用javacomm20读取客户端串口public class SerialHandleBean implements SerialPortEventListe

网页上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

?

以上很初略的代码。

热点排行