Java如何按16进制发送和接收TCP指令

 更新时间:2023年09月28日 10:23:24   作者:qq_38310536  
这篇文章主要介绍了Java如何按16进制发送和接收TCP指令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java按16进制发送和接收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 {  
			//要连接的服务端IP地址  
			String host = "192.168.1.2"; 
			//要连接的服务端对应的监听端口  
			int port = 502;   
			//将十六进制的字符串转换成字节数组
			byte[] cmdInfor2 = hexStrToBinaryStr(cmdInfor);
			//1.建立客户端socket连接,指定服务器位置及端口  
			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();  
			//接收服务器的响应 
            		int line = 0; 
			byte[] buf = new byte[is.available()];
			 //接收收到的数据
           		 while((line=is.read(buf))!=-1){
	           	        //将字节数组转换成十六进制的字符串
	            		strReturn= BinaryToHexString(buf);
           		 }
			//4.关闭资源  
			is.close();  
			pw.close();  
			os.close();  
			clientSocket.close();
		}catch (Exception e){
			e.printStackTrace();
		}
		return strReturn;
	}  
	/**
	 * 将十六进制的字符串转换成字节数组
	 *
	 * @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;
	}
	/**
	 * 将字节数组转换成十六进制的字符串
	 *
	 * @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协议发送和接收数据

TCP

TCP是面向连接的可靠传输协议

Java使用TCP发送数据代码

三步:

  • (1) 创建客户端的Socket对象Socket
  • (2) 获取输出流,写数据
  • (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接收数据代码

四步

  • (1) 创建服务器Socket对象ServerSocket
  • (2) 监听客户端链接,返回Socket对象
  • (3) 获取输入流,读数据,控制台显示
  • (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();
    }
}

执行

分别启动TCPTest01.java和TCPTest02.java,可在控制台看到输出TCP。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea2020.1最新版永久破解/pycharm也可用(步骤详解)

    idea2020.1最新版永久破解/pycharm也可用(步骤详解)

    这篇文章主要介绍了idea2020.1最新版永久破解/pycharm也可用,本文给大家分享简单实现步骤,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 用html css javascript打造自己的RIA图文教程

    用html css javascript打造自己的RIA图文教程

    用html&css&javascript打造自己的RIA之一,包括了配置等
    2009-07-07
  • Java使用WebFlux调用大模型实现智能对话

    Java使用WebFlux调用大模型实现智能对话

    这篇文章主要为大家详细介绍了Java如何使用WebFlux调用大模型实现智能对话效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-06-06
  • Resilience4J通过yml设置circuitBreaker的方法

    Resilience4J通过yml设置circuitBreaker的方法

    Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计,这篇文章主要介绍了Resilience4J通过yml设置circuitBreaker的方法,需要的朋友可以参考下
    2022-10-10
  • SpringBoot详解如何进行整合Druid数据源

    SpringBoot详解如何进行整合Druid数据源

    Druid是阿里开发的一款开源的数据源,被很多人认为是Java语言中最好的数据库连接池,本文主要介绍了SpringBoot整合Druid数据源的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Java集合之LinkedHashSet类详解

    Java集合之LinkedHashSet类详解

    这篇文章主要介绍了Java集合之LinkedHashSet类详解,LinkedHashSet 是 Java 中的一个集合类,它是 HashSet 的子类,并实现了 Set 接口,与 HashSet 不同的是,LinkedHashSet 保留了元素插入的顺序,并且具有 HashSet 的快速查找特性,需要的朋友可以参考下
    2023-09-09
  • java string类方法深入解析

    java string类方法深入解析

    以下是对java中的string类方法进行了详细的分析介绍。需要的朋友可以过来参考下
    2013-08-08
  • IDEA中Maven依赖包无法下载或导入的解决方案(系统缺失文件导致)

    IDEA中Maven依赖包无法下载或导入的解决方案(系统缺失文件导致)

    在配置Maven环境时,可能会遇到各种报错问题,首先确保Maven路径配置正确,例如使用apache-maven-3.5.0版本,则需要在系统环境变量的Path中添加其bin目录路径,并上移优先级,接下来,在Maven的conf目录下修改settings.xml文件,将镜像源改为阿里云
    2024-09-09
  • SpringBoot拦截器的使用

    SpringBoot拦截器的使用

    这篇文章主要给大家分享的是SpringBoot拦截器的使用,拦截器通常通过动态代理的方式来执行。拦截器的生命周期由IoC容器管理,可以通过注入等方式来获取其他Bean的实例,使用更方便,下面文章的详细内容,需要的朋友可以参考一下
    2021-11-11
  • vscode搭建java开发环境的实现步骤

    vscode搭建java开发环境的实现步骤

    本文主要介绍了vscode搭建java开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论