導航:首頁 > 編程語言 > 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串口發送相關的資料

熱點內容
美食博主用什麼app拍視頻 瀏覽:812
ipone手機如何加密微信 瀏覽:354
自來水加密閥閥帽 瀏覽:431
華為交換機dhcp配置命令 瀏覽:315
androidbitmap縮小 瀏覽:271
單片機串口控制燈 瀏覽:84
大訊雲伺服器安裝視頻 瀏覽:784
華為演算法領先世界 瀏覽:654
linux路由重啟 瀏覽:566
php的模板編程 瀏覽:320
編譯器原理與實現書 瀏覽:709
dos選擇命令 瀏覽:17
apm固件編譯到單片機 瀏覽:121
聯通深藍卡都包含什麼app 瀏覽:264
如何判斷網路伺服器正常 瀏覽:652
路由器搭橋遠端伺服器地址是什麼 瀏覽:518
編譯動態庫時會連接依賴庫嗎 瀏覽:710
淘寶手機加密是隨機的嗎 瀏覽:675
解壓包子怎麼裝飾 瀏覽:588
四個數湊24演算法 瀏覽:679