導航:首頁 > 編程語言 > java串口發送

java串口發送

發布時間:2022-09-09 17:02:29

『壹』 java串口編程,數據收發

下面是C寫的供你參考:
1.TCP流式套接字的編程步驟
在使用之前須鏈接庫函數:工程->設置->Link->輸入ws2_32.lib,OK!
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//創建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//轉換Unsigned short為網路位元組序的格式
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);創建套接字(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));向伺服器發出連接請求(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()();//必須調用這個函數清除參數
}

『貳』 java 如何向串口發送指令

舉個例子:
byte[] bt = new byte{……}; ???如何定義
outputStream = serialPort.getOutputStream();
outputStream.write(bt);
代碼如下:
byte[] bt = new byte{02,04,00,00,00,02,71,F8};
這樣試試看看,就當成是整數數組定義 。

『叄』 JAVA串口怎麼發送16進制

那就需要轉換了。
我最近也在做這樣的項目,轉換來,轉換去麻煩死。

發送的16進制串要先轉換為byte[]然後writer
接受方read()後要把位元組在轉換成16進制串。
//16進制串轉換成位元組數組
public static 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;
}

private static byte charToByte(char c)
{
return (byte)"0123456789ABCDEF".indexOf(c);
}
//位元組數組轉換成16進制串
public static String byte2HexStr(byte[] b, int length)
{
String hs = "";
String stmp = "";
for (int n = 0; n < length; ++n) {
stmp = Integer.toHexString(b[n] & 0xFF);
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
} 不明白+wo 448667

『肆』 JAVA串口編程如何發送字元串和接受字元串

apache mina 有很的串的封裝,,,

『伍』 java如何給單片機串口發送一個16進制的命令,在線等!!!

public static byte[] hex2byte(String hex) {
String digital = "0123456789ABCDEF";
String hex1 = hex.replace(" ", "");
char[] hex2char = hex1.toCharArray();
byte[] bytes = new byte[hex1.length() / 2];
byte temp;
for (int p = 0; p < bytes.length; p++) {
temp = (byte) (digital.indexOf(hex2char[2 * p]) * 16);
temp += digital.indexOf(hex2char[2 * p + 1]);
bytes[p] = (byte) (temp & 0xff);
}
return bytes;
}

byte [] asd =hex2byte(message);
outputStream.write(asd);

『陸』 java串口,讀取和發送數據

publicstaticvoidprocess(){
try{
EnumerationportList=CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements())
{
CommPortIdentifierportId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL)//如果埠類型是串口則判斷名稱
{
if(portId.getName().equals("COM1")){//如果是COM1埠則退出循環
break;
}else{
portId=null;
}
}
}
SerialPortserialPort=(SerialPort)portId.open("Serial_Communication",1000);//打開串口的超時時間為1000ms
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//設置串口速率為9600,數據位8位,停止位1們,奇偶校驗無
InputStreamin=serialPort.getInputStream();//得到輸入流
OutputStreamout=serialPort.getOutputStream();//得到輸出流

//進行輸入輸出操作
//操作結束後
in.close();
out.close();
serialPort.close();//關閉串口

}catch(PortInUseExceptione){
e.printStackTrace();
}catch(){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}

}

『柒』 java串口通信,如何實現用同一個串口實現發送數據和接收數據

虛擬串口吧,直接的同串口貌似是不能同時接收和發送的吧,除非全雙工的

等等,如果說按照全雙工方式來實現的話,理論上可以的,我去幫你找找資料

恩,資料地址在附件里

『捌』 Java串口通信發送十六進制的問題

對於輸入輸出來說,就只有二進制,沒有十六進制的說法。
你還是說說,這個程序到底是要幾個二進制位。
---------------
你看看這樣行不行。
試試下面這兩種方法。
1.輸出4個位元組
int value = Integer.parseInt("41", 16);
out.write(value);

2.輸出一個位元組
byte value = Byte.parseByte("41", 16);
out.write(value);

『玖』 java串口怎麼給溫控器發送16進制數

做串口通訊的時候基本都是通過io流讀取、輸出。那麼在java開發中發送數據的時候使用OutputStream,而其write()的參數是位元組數組、int整形。如果使用位元組數組發送的時候,通常可以直接寫成out.write("1234".getBytes())。這樣一來單片機讀到的數據則是31 32 33 34。但是在串口發送的時候先把16進制字元串轉化為byte數組在發送出來,則是發送什麼讀取到的就是什麼。使用:out.write(HexString2Bytes("1234"));那麼讀取到的還是1234。16進制字元串轉化為byte數組的方法為:
public static byte[] HexString2Bytes(String src) {
if (null == src || 0 == src.length()) {
return null;
}
byte[] ret = new byte[src.length() / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i < (tmp.length / 2); i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}

在用java做串口開發的時候建議使用開源的Rxtx做。效率、使用方法都要優。使用sun開源的comm個人覺得不是很便利。rxtx網上有開源實例。可以根據自己個需求進行加以修飾利用。

『拾』 java如何向串口發送指令

需要一個包 comm.jar
需要一個配置文件 javax.comm.properties (工程根目錄)
(或者放在JDK里)
// 取得埠句柄
CommPortIdentifier id = CommPortIdentifier.getPortIdentifier(portName);
port = (SerialPort) id .open("SerialDemo", 30000);
port .setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

port .notifyOnDataAvailable(true);
port .notifyOnBreakInterrupt(true);
port .enableReceiveTimeout(delayTime);

讀取之類的自己寫就行了,(port .getInputStream()),完事之後別忘了關掉埠,不然下次就不能用了,只能重啟系統

配置文件里就一行:
Driver=com.sun.comm.Win32Driver

----------------------------------
你設個斷點單步調試看一下原因,那個SerialBean是你自己寫的,誰也不知道裡面整啥了,單步調試就知道哪裡錯誤。
拋出異常了Exception in thread "main" java.lang.NullPointerException
at serial.SerialBean.WritePort(SerialBean.java:114)
從這里看,是在SerialBean.java的114行(函數WritePort)的一個東西,它的值是null,所以報錯了

閱讀全文

與java串口發送相關的資料

熱點內容
阿里雲伺服器沒有實例 瀏覽:601
綿陽有沒有什麼app 瀏覽:844
怎麼用游俠映射伺服器 瀏覽:917
為什麼無意下載的app無法刪除 瀏覽:304
word2007打開pdf 瀏覽:117
php正則class 瀏覽:736
怎麼在文件夾查找一堆文件 瀏覽:543
核酸報告用什麼app 瀏覽:791
u8怎麼ping通伺服器地址 瀏覽:994
安卓什麼手機支持背部輕敲調出健康碼 瀏覽:870
程序員抽獎排行 瀏覽:744
扭蛋人生安卓如何下載 瀏覽:724
什麼app文檔資源多好 瀏覽:924
黑馬程序員APP 瀏覽:148
掌閱小說是哪個app 瀏覽:47
如何把u盤的軟體安裝到安卓機 瀏覽:1000
php跑在什麼伺服器 瀏覽:126
編譯器怎麼跳轉到下一行 瀏覽:454
嵌入式py編譯器 瀏覽:328
rplayer下載安卓哪個文件夾 瀏覽:302