Java如何按16進制發(fā)送和接收TCP指令
更新時間:2023年09月28日 10:23:24 作者:qq_38310536
這篇文章主要介紹了Java如何按16進制發(fā)送和接收TCP指令問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
Java按16進制發(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; //將十六進制的字符串轉(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進行讀寫操作 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)換成十六進制的字符串 strReturn= BinaryToHexString(buf); } //4.關(guān)閉資源 is.close(); pw.close(); os.close(); clientSocket.close(); }catch (Exception e){ e.printStackTrace(); } return strReturn; } /** * 將十六進制的字符串轉(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)換成十六進制的字符串 * * @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-04Spring中@DependsOn注解的作用及實現(xiàn)原理解析
這篇文章主要介紹了Spring中@DependsOn注解的作用及實現(xiàn)原理解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Springboot集成Elasticsearch的步驟與相關(guān)功能
ElasticSearch是開源搜索平臺領(lǐng)域的一個新成員,?ElasticSearch是一個基于Lucene構(gòu)建的開源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關(guān)于Springboot集成Elasticsearch的相關(guān)資料,需要的朋友可以參考下2021-12-12