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

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

Java技术迷

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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) 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
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) 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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。

总结

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

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/qq_38310536/article/details/85291578

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • springboot之security FilterSecurityInterceptor的使用要点记录

    springboot之security FilterSecurityInterceptor的使用要点记录

    这篇文章主要介绍了springboot之security FilterSecurityInterceptor的使用要点记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解Elasticsearch如何把一个索引变为只读

    详解Elasticsearch如何把一个索引变为只读

    这篇文章主要为大家介绍了详解Elasticsearch如何把一个索引变为只读示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java实现下载文件的6种方式

    Java实现下载文件的6种方式

    本文主要介绍了Java实现下载文件的6种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 浅谈Java Fork/Join并行框架

    浅谈Java Fork/Join并行框架

    这篇文章主要介绍了浅谈Java Fork/Join并行框架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 基于Java编写简易的算式测试程序

    基于Java编写简易的算式测试程序

    本文将利用Java语言编写一个简易的算式测试程序,这个程序可以自动生成指定数量的加减乘三则运算题目,感兴趣的小伙伴可以了解一下
    2022-05-05
  • java语言实现权重随机算法完整实例

    java语言实现权重随机算法完整实例

    这篇文章主要介绍了java语言实现权重随机算法完整实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • Javacv使用ffmpeg实现音视频同步播放

    Javacv使用ffmpeg实现音视频同步播放

    这篇文章主要介绍了Javacv使用ffmpeg实现音视频同步播放,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 利用Java如何获取IP与机器名方法示例

    利用Java如何获取IP与机器名方法示例

    在开发工作中,我们常常需要获取客户端的IP。下面这篇文章主要给大家介绍了关于利用Java如何获取IP与机器名的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Java如何通过jstack命令查询日志

    Java如何通过jstack命令查询日志

    在分析线上问题时常使用到jstack <PID>命令将当时Java应用程序的线程堆栈dump出来,面对jstack 日志,我们如何查看?下面小编给大家介绍下Java如何通过jstack命令查询日志,感兴趣的朋友一起看看吧
    2023-03-03
  • POS机如何与Java交互的方式探讨

    POS机如何与Java交互的方式探讨

    本文深入探讨POS机与Java语言的交互机制,详细介绍了通过RESTfulAPI、Socket编程和消息队列等方式实现数据交换和功能调用,文章还包含了代码示例、状态图与关系图,帮助开发者理解和实现POS机与Java之间的高效交互
    2024-09-09

最新评论