Java如何按16進(jìn)制發(fā)送和接收TCP指令
更新時間:2023年09月28日 10:23:24 作者:qq_38310536
這篇文章主要介紹了Java如何按16進(jìn)制發(fā)送和接收TCP指令問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
Java按16進(jìn)制發(fā)送和接收TCP指令
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import org.apache.http.util.TextUtils;
public class TCPSocket{
public static void main(String args[]){
String cmdInfor="00 00 00 00 00 06 01 01 00 01 00 20";
send(cmdInfor);
}
public static String send(String cmdInfor){
String strReturn = null;
try {
//要連接的服務(wù)端IP地址
String host = "192.168.1.2";
//要連接的服務(wù)端對應(yīng)的監(jiān)聽端口
int port = 502;
//將十六進(jìn)制的字符串轉(zhuǎn)換成字節(jié)數(shù)組
byte[] cmdInfor2 = hexStrToBinaryStr(cmdInfor);
//1.建立客戶端socket連接,指定服務(wù)器位置及端口
Socket clientSocket =new Socket(host,port);
//2.得到socket讀寫流
OutputStream os=clientSocket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//輸入流
InputStream is=clientSocket.getInputStream();
//3.利用流按照一定的操作,對socket進(jìn)行讀寫操作
os.write(cmdInfor2);
os.flush();
clientSocket.shutdownOutput();
//接收服務(wù)器的響應(yīng)
int line = 0;
byte[] buf = new byte[is.available()];
//接收收到的數(shù)據(jù)
while((line=is.read(buf))!=-1){
//將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制的字符串
strReturn= BinaryToHexString(buf);
}
//4.關(guān)閉資源
is.close();
pw.close();
os.close();
clientSocket.close();
}catch (Exception e){
e.printStackTrace();
}
return strReturn;
}
/**
* 將十六進(jìn)制的字符串轉(zhuǎn)換成字節(jié)數(shù)組
*
* @param hexString
* @return
*/
public static byte[] hexStrToBinaryStr(String hexString) {
if (TextUtils.isEmpty(hexString)) {
return null;
}
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
int index = 0;
byte[] bytes = new byte[len / 2];
while (index < len) {
String sub = hexString.substring(index, index + 2);
bytes[index/2] = (byte)Integer.parseInt(sub,16);
index += 2;
}
return bytes;
}
/**
* 將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制的字符串
*
* @return
*/
public static String BinaryToHexString(byte[] bytes) {
String hexStr = "0123456789ABCDEF";
String result = "";
String hex = "";
for (byte b : bytes) {
hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
hex += String.valueOf(hexStr.charAt(b & 0x0F));
result += hex + " ";
}
return result;
}
}Java使用TCP協(xié)議發(fā)送和接收數(shù)據(jù)
TCP
TCP是面向連接的可靠傳輸協(xié)議
Java使用TCP發(fā)送數(shù)據(jù)代碼
三步:
- (1) 創(chuàng)建客戶端的Socket對象Socket
- (2) 獲取輸出流,寫數(shù)據(jù)
- (3) 釋放資源
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TCPTest01 {
? ? public static void main(String[] args) throws IOException {
? ? ? ? Socket s = new Socket(InetAddress.getByName("uos-pc"), 10086);
? ? ? ? OutputStream os = s.getOutputStream();
? ? ? ? os.write("FTP".getBytes());
? ? ? ? s.close();
? ? }
}Java使用TCP接收數(shù)據(jù)代碼
四步
- (1) 創(chuàng)建服務(wù)器Socket對象ServerSocket
- (2) 監(jiān)聽客戶端鏈接,返回Socket對象
- (3) 獲取輸入流,讀數(shù)據(jù),控制臺顯示
- (4) 釋放資源
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPTest02 {
? ? public static void main(String[] args) throws IOException {
? ? ? ? ServerSocket ss = new ServerSocket(10086);
? ? ? ? Socket s = ss.accept();
? ? ? ? InputStream is = s.getInputStream();
? ? ? ? byte[] b = new byte[1024];
? ? ? ? int len = is.read(b);
? ? ? ? String data = new String(b, 0, len);
? ? ? ? System.out.println(data);
? ? ? ? s.close();
? ? ? ? ss.close();
? ? }
}執(zhí)行
分別啟動TCPTest01.java和TCPTest02.java,可在控制臺看到輸出TCP。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea2020.1最新版永久破解/pycharm也可用(步驟詳解)
這篇文章主要介紹了idea2020.1最新版永久破解/pycharm也可用,本文給大家分享簡單實現(xiàn)步驟,通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Spring中@DependsOn注解的作用及實現(xiàn)原理解析
這篇文章主要介紹了Spring中@DependsOn注解的作用及實現(xiàn)原理解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Springboot集成Elasticsearch的步驟與相關(guān)功能
ElasticSearch是開源搜索平臺領(lǐng)域的一個新成員,?ElasticSearch是一個基于Lucene構(gòu)建的開源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關(guān)于Springboot集成Elasticsearch的相關(guān)資料,需要的朋友可以參考下2021-12-12

