java串口 来电显示

一.使用sun公司的comm.jar
1.配置(下载comm.jar包http://code.google.com/p/smslib/downloads/detail?name=javacomm20-win32.zip&can=2&q=)
(1).将包下的javax.comm.properties放到jdk home/jre/lib下
(2).将包下的win32com.dll放到jdk home/jre/bin下(也可以放到windows下的system32下)
(3).将comm.jar放到jdk home/jre/lib/ext下
2.java代码

Java代码 收藏代码
  1. packagecomm;
  2. importjava.io.IOException;
  3. importjava.io.InputStream;
  4. importjava.io.OutputStream;
  5. importjava.util.Enumeration;
  6. importjava.util.TooManyListenersException;
  7. importjavax.comm.CommDriver;
  8. importjavax.comm.CommPortIdentifier;
  9. importjavax.comm.PortInUseException;
  10. importjavax.comm.SerialPort;
  11. importjavax.comm.SerialPortEvent;
  12. importjavax.comm.SerialPortEventListener;
  13. importjavax.comm.UnsupportedCommOperationException;
  14. publicclassSimpleWrite{
  15. publicstaticvoidmain(String[]args){
  16. //System.loadLibrary("win32com");
  17. CommDriverdriver=null;
  18. StringdriverName="com.sun.comm.Win32Driver";
  19. //SerialPortsPort=(SerialPort)driver.getCommPort("COM4",
  20. //CommPortIdentifier.PORT_SERIAL);
  21. Enumeration<CommPortIdentifier>enumeration=CommPortIdentifier
  22. .getPortIdentifiers();
  23. while(enumeration.hasMoreElements()){
  24. CommPortIdentifierportId=enumeration.nextElement();
  25. System.out.println(portId.getName()+"============");
  26. if(portId.getName().equals("COM1")){
  27. try{
  28. System.out.println("jjj");
  29. finalSerialPortsp=(SerialPort)portId.open(
  30. "SimpleWrite",1000);
  31. sp.setSerialPortParams(2400,SerialPort.DATABITS_8,
  32. SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);
  33. finalInputStreamis=sp.getInputStream();
  34. finalOutputStreamos=sp.getOutputStream();
  35. os.write(100);
  36. os.flush();
  37. os.close();
  38. //SetnotifyOnDataAvailabletotruetoalloweventdriveninput.
  39. sp.notifyOnDataAvailable(true);
  40. //SetnotifyOnBreakInterruptoalloweventdrivenbreak
  41. //handling.
  42. sp.notifyOnBreakInterrupt(true);
  43. //Setreceivetimeouttoallowbreakingoutofpollingloop
  44. //duringinputhandling.
  45. sp.enableReceiveTimeout(30);
  46. finalStringBufferlinkWgt=newStringBuffer();//存放获取的数据
  47. sp.addEventListener(newSerialPortEventListener(){
  48. @Override
  49. publicvoidserialEvent(SerialPortEvente){
  50. intnewData=0;
  51. //Determinetypeofevent.
  52. switch(e.getEventType()){
  53. //Readdatauntil-1isreturned.If\risreceived
  54. //substitute
  55. //\nforcorrectnewlinehandling.
  56. caseSerialPortEvent.DATA_AVAILABLE:
  57. while(newData!=-1){
  58. try{
  59. newData=is.read();
  60. if(newData==-1){
  61. break;
  62. }
  63. if('\r'==(char)newData){
  64. }else{
  65. linkWgt.append((char)newData);
  66. }
  67. }catch(IOExceptionex){
  68. System.err.println(ex);
  69. return;
  70. }
  71. }
  72. //AppendreceiveddatatomessageAreaIn.
  73. try{
  74. System.out
  75. .println("linkWgt---------|||||"
  76. +Double.valueOf(linkWgt
  77. .toString()));
  78. }catch(Exceptionew){
  79. ew.printStackTrace();
  80. }finally{
  81. try{
  82. //用完了,记得关闭端口。
  83. is.close();
  84. sp.close();
  85. }catch(Exceptionc){
  86. c.printStackTrace();
  87. }
  88. }
  89. break;
  90. //IfbreakeventappendBREAKRECEIVEDmessage.
  91. caseSerialPortEvent.BI:
  92. System.out
  93. .println("\n---BREAKRECEIVED---\n");
  94. }
  95. }
  96. });
  97. }catch(PortInUseExceptione){
  98. e.printStackTrace();
  99. }catch(UnsupportedCommOperationExceptione){
  100. e.printStackTrace();
  101. }catch(IOExceptione){
  102. e.printStackTrace();
  103. }catch(TooManyListenersExceptione){
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. }
  109. }


二.用rxtx.jar代替comm.jar
# copy rxtxSerial.dll into your c:\program files\java\jre-version\bin dir
# copy RXTXcomm.jar into your c:\program files\java\jre-version\lib\ext dir
# change all references from 'javax.comm' to 'gnu.io'
三.然后就可以测试了,推荐使用Virtual Serial Port Driver 6.9 by Eltima Software
它可以虚拟出两个相连的串口,你可以通过包里的一个小例子:SimpleWrite,SimpleRead
来测试
四.检查下你的modem支不支持来电显示:

1.打开超级终端,随便输入一个连接名称,例如TEST。(也可以用其它终端件, 如Bitware)
2.按确定后,下个窗口中,看到你的MODEM,不要输入电话号码。再下一步。
3.在这个窗口中按取消。
4.这样一个可以输入的空白窗口就有了。
输入:ATE1回车
如果出现OK,说明MODEM支持AT指令,不然,其他也不用试了。
然后输入下面的命令,只要一条反应有OK,就说明MODEM本身芯片支持来电显示。
AT#CID=1 比较常用
AT%CCID=1
AT+VCID=1 比较常用
AT#CC1
AT*ID1
5.如果有一条有OK,接下来,你打入电话,(事先接好电话线到MODEM)。
如果你的MODEM真的支持来电显示,则会出现如下类似的内容:
RING
DATE = 1010
TIME = 1600
NMBR = **********(你拨入的主叫号码)
RING
如果你的MODEM不支持来电显示,则此时可能会显示:
RING
RING
RING
还有的MODEM,什么也不显示,那就更不可能支持来电显示了。

http://www.ititgo.com.cn/goods-144.html

下面我也把comm的包贴上来,估摸着很多朋友进不去那个googlecode,下载地址是下载

你可能感兴趣的:(java)