真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java串口讀取源代碼,java串口開發(fā)

求C++或C#或java,串口通信代碼?。?!

我有,我之前就是做串口通信的,SerialPort

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都網(wǎng)站設計、外貿營銷網(wǎng)站建設與策劃設計,禹城網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:禹城等地區(qū)。禹城做網(wǎng)站價格咨詢:13518219792

using system.io.port;

SerialPort port = new SerialPort();

string []portName = SerialPort.GetPortName();//獲取串口名數(shù)組

port.PortName = portName[0];

//在這里添加設置串口的一些屬性,例如波特率等等

if(!port.IsOpen)

{

try{

port.Open();

}catch(Exception e)

{

MessageBox.Show(e.Message);

}

}

界面部分我到時再發(fā)給你

java串口編程,數(shù)據(jù)收發(fā)

下面是C寫的供你參考:

1.TCP流式套接字的編程步驟

在使用之前須鏈接庫函數(shù):工程-設置-Link-輸入ws2_32.lib,OK!

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建套接字(socket)。

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//轉換Unsigned short為網(wǎng)絡字節(jié)序的格式

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

客戶端代碼如下:

#include Winsock2.h

#include stdio.h

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, wsaData );加載套接字庫

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup()( );

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);創(chuàng)建套接字(socket)。

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

connect(sockClient,(SOCKADDR*)addrSrv,sizeof(SOCKADDR));向服務器發(fā)出連接請求(connect)。

char recvBuf[100];和服務器端進行通信(send/recv)。

recv(sockClient,recvBuf,100,0);

printf("%s\n",recvBuf);

send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);關閉套接字。

WSACleanup()();//必須調用這個函數(shù)清除參數(shù)

}

java如何從串口讀取數(shù)據(jù)帶GUI

1.導入支持java串口通信的jar包:

在maven項目的pom.xml中添加RXTXcomm的依賴 或者 下載RXTXcomm.jar并導入到項目中。

支持Java串口通信操作的jar包,java.comm比較老,而且不支持64位系統(tǒng),推薦使用Rxtx這個jar包(32位/64位均支持)。

注意:運行過程中拋出 java.lang.UnsatisfiedLinkError 錯誤或 gnu.io 下的類找不到時,將rxtx解壓包中的 rxtxParallel.dll,rxtxSerial.dll 這兩個文件復制到 C:\Windows\System32 目錄下可解決該錯誤。

2.編寫代碼操作串口:

串口必要參數(shù)類:包含連接串口所必須的參數(shù),方便在調用串口時設置和傳遞串口參數(shù)。

java串口,讀取和發(fā)送數(shù)據(jù)

public?static?void?process()?{

try?{

Enumeration?portList?=?CommPortIdentifier.getPortIdentifiers();

while?(portList.hasMoreElements())

{

CommPortIdentifier?portId?=?(CommPortIdentifier)?portList.nextElement();

if?(portId.getPortType()?==?CommPortIdentifier.PORT_SERIAL)//如果端口類型是串口則判斷名稱

{

if(portId.getName().equals("COM1")){//如果是COM1端口則退出循環(huán)

break;

}else{

portId=null;

}

}

}

SerialPort?serialPort?=?(SerialPort)portId.open("Serial_Communication",?1000);//打開串口的超時時間為1000ms

serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//設置串口速率為9600,數(shù)據(jù)位8位,停止位1們,奇偶校驗無

InputStream?in?=?serialPort.getInputStream();//得到輸入流

OutputStream?out?=?serialPort.getOutputStream();//得到輸出流

//進行輸入輸出操作

//操作結束后

in.close();

out.close();

serialPort.close();//關閉串口

}?catch?(PortInUseException?e)?{

e.printStackTrace();

}?catch?(UnsupportedCommOperationException?e)?{

e.printStackTrace();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

JAVA讀取com串口數(shù)據(jù)

java沒有自帶的COM工具

需要導入外來的包來做

建議使用RXTX

具體可以自己baidu下

求??java 關于串口數(shù)據(jù)讀取和寫入方法(最好解釋下)

Comm API基礎

我無意于在此詳細描述Comm API每個類和接口的用法,但我會介紹Comm API的類結構和幾個重要的API用法。

所有的comm API位于javax.comm包下面。從Comm API的javadoc來看,它介紹給我們的只有區(qū)區(qū)以下13個類或接口:

javax.comm.CommDriver

javax.comm.CommPort

javax.comm.ParallelPort

javax.comm.SerialPort

javax.comm.CommPortIdentifier

javax.comm.CommPortOwnershipListener

javax.comm.ParallelPortEvent

javax.comm.SerialPortEvent

javax.comm.ParallelPortEventListener (extends java.util.EventListener)

javax.comm.SerialPortEventListener (extends java.util.EventListener)

javax.comm.NoSuchPortException

javax.comm.PortInUseException

javax.comm.UnsupportedCommOperationException

下面講解一下幾個主要類或接口。

1.枚舉出系統(tǒng)所有的RS232端口

在開始使用RS232端口通訊之前,我們想知道系統(tǒng)有哪些端口是可用的,以下代碼列出系統(tǒng)中所有可用的RS232端口:

Enumeration en = CommPortIdentifier.getPortIdentifiers();

CommPortIdentifier portId;

while (en.hasMoreElements())

{

portId = (CommPortIdentifier) en.nextElement();

/*如果端口類型是串口,則打印出其端口信息*/

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)

{

System.out.println(portId.getName());

}

}

在我的電腦上以上程序輸出以下結果:

COM1

COM2

CommPortIdentifier類的getPortIdentifiers方法可以找到系統(tǒng)所有的串口,每個串口對應一個CommPortIdentifier類的實例。

2.打開端口

如果你使用端口,必須先打開它。

try{

CommPort serialPort = portId.open("My App", 60);

/*從端口中讀取數(shù)據(jù)*/

InputStream input = serialPort.getInputStream();

input.read(...);

/*往端口中寫數(shù)據(jù)*/

OutputStream output = serialPort.getOutputStream();

output.write(...)

...

}catch(PortInUseException ex)

{ ... }

通過CommPortIdentifier的open方法可以返回一個CommPort對象。open方法有兩個參數(shù),第一個是String,通常設置為你的應用程序的名字。第二個參數(shù)是時間,即開啟端口超時的毫秒數(shù)。當端口被另外的應用程序占用時,將拋出PortInUseException異常。

在這里CommPortIdentifier類和CommPort類有什么區(qū)別呢?其實它們兩者是一一對應的關系。CommPortIdentifier主要負責端口的初始化和開啟,以及管理它們的占有權。而CommPort則是跟實際的輸入和輸出功能有關的。通過CommPort的getInputStream()可以取得端口的輸入流,它是java.io.InputStream接口的一個實例。我們可以用標準的InputStream的操作接口來讀取流中的數(shù)據(jù),就像通過FileInputSteam讀取文件的內容一樣。相應的,CommPort的getOutputStream可以獲得端口的輸出流,這樣就可以往串口輸出數(shù)據(jù)了。

3.關閉端口

使用完的端口,必須記得將其關閉,這樣可以讓其它的程序有機會使用它,不然其它程序使用該端口時可能會拋出端口正在使用中的錯誤。很奇怪的是,CommPortIdentifier類只提供了開啟端口的方法,而要關閉端口,則要調用CommPort類的close()方法。

CommPort的輸入流的讀取方式與文件的輸入流有些不一樣,那就是你可能永遠不知這個InputStream何時結束,除非對方的OutputStream向你發(fā)送了一個特定數(shù)據(jù)表示發(fā)送結束,你收到這個特定字符后,再行關閉你的InputStream。而comm.jar提供了兩種靈活的方式讓你讀取數(shù)據(jù)。

1.輪詢方式(Polling)

舉個例子,你同GF相約一起出門去看電影,但你的GF好打扮,這一打扮可能就是半小時甚至一小時以上。這時你就耐不住了,每兩分鐘就催問一次“好了沒?”,如此這樣,直到你的GF說OK了才算完。這個就叫輪詢(Polling)。

在程序中,輪詢通常設計成一個封閉的循環(huán),當滿足某個條件時即結束循環(huán)。剛才那個例子中,你的GF說“OK了!”,這個就是結束你輪詢的條件。在單線程的程序中,當循環(huán)一直執(zhí)行某項任務而又無法預知它何時結束時,此時你的程序看起來可能就像死機一樣。在VB程序中,這個問題可以用在循環(huán)結構中插入一個doEvent語句來解決。而Java中,最好的方式是使用線程,就像以下代碼片斷一樣。

public TestPort extend Thread

{

...

InputStream input = serialPort.getInputStream();

StringBuffer buf = new StringBuffer();

boolean stopped = false;

...

public void run()

{

try {

while( !stopped )

int ch = input.read();

if ( ch=='q' || ch=='Q' )

{

/*結束讀取,關閉端口...*/

stopped = true;

...

}

else

{

buf.append((char)ch);

...

}

}catch (InterruptedException e) { }

}

}

2.監(jiān)聽方式(listening)

Comm API支持標準的Java Bean型的事件模型。也就是說,你可以使用類似AddXXXListener這樣的方法為一個串口注冊自己的監(jiān)聽器,以監(jiān)聽方式進行數(shù)據(jù)讀取。

如要對端口監(jiān)聽,你必須先取得CommPortIdentifier類的一個實例,

CommPort serialPort = portId.open("My App", 60);

從而取得SerialPort,再調用它的addEventListener方法為它添加監(jiān)聽器,

serialPort.addEventListener(new MyPortListener());

SerialPort的監(jiān)聽器必須繼承于SerialPortEventListener接口。當有任何SerialPort的事件發(fā)生時,將自動調用監(jiān)聽器中的serialEvent方法。Serial Event有以下幾種類型:

BI -通訊中斷.

CD -載波檢測.

CTS -清除發(fā)送.

DATA_AVAILABLE -有數(shù)據(jù)到達.

DSR -數(shù)據(jù)設備準備好.

FE -幀錯誤.

OE -溢位錯誤.

OUTPUT_BUFFER_EMPTY -輸出緩沖區(qū)已清空.

PE -奇偶校驗錯.

RI - 振鈴指示.

下面是一個監(jiān)聽器的示例:

public void MyPortListener implements SerialPortEventListener

{

 public void serialEvent(SerialPortEvent evt)

 {

switch (evt.getEventType())

{

 case SerialPortEvent.CTS :

System.out.println("CTS event occured.");

break;

 case SerialPortEvent.CD :

System.out.println("CD event occured.");

break;

 case SerialPortEvent.BI :

System.out.println("BI event occured.");

break;

 case SerialPortEvent.DSR :

System.out.println("DSR event occured.");

break;

 case SerialPortEvent.FE :

System.out.println("FE event occured.");

break;

 case SerialPortEvent.OE :

System.out.println("OE event occured.");

break;

 case SerialPortEvent.PE :

System.out.println("PE event occured.");

break;

 case SerialPortEvent.RI :

System.out.println("RI event occured.");

break;

 case SerialPortEvent.OUTPUT_BUFFER_EMPTY :

System.out.println("OUTPUT_BUFFER_EMPTY event occured.");

break;

 case SerialPortEvent.DATA_AVAILABLE :

System.out.println("DATA_AVAILABLE event occured.");

int ch;

StringBuffer buf = new StringBuffer();

InputStream input = serialPort.getInputStream

try {

 while ( (ch=input.read()) 0) {

buf.append((char)ch);

 }

 System.out.print(buf);

} catch (IOException e) {}

break;

 }

}

這個監(jiān)聽器只是簡單打印每個發(fā)生的事件名稱。而對于大多數(shù)應用程序來說,通常關心是DATA_AVAILABLE事件,當數(shù)據(jù)從外部設備傳送到端口上來時將觸發(fā)此事件。此時就可以使用前面提到過的方法,serialPort.getInputStream()來從InputStream中讀取數(shù)據(jù)了。


網(wǎng)頁標題:java串口讀取源代碼,java串口開發(fā)
鏈接分享:http://weahome.cn/article/dssecch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部