SOCKET通信,封装的疑惑

SOCKET通信,方式一用调试工具收到的数据与第二种方式不同。
具体是方式二,大括号外才是真正发送数据;大括号内是发送的字节。
方式一,下位机说收不到,但以前的项目是可以的。
很疑惑这两种方式有什么不同,为什么在调试工具收到的显示不一样,哪种是正确的用法?

一、第一种方式发送
1)封装方法
byte[] data=new byte[11]
data[0]=0xAA
socketTcp.SendData(data,X);

2)调试工具收到的数据
9:01:05 收到数据:{AA CD 10 1A 08 00 32 00 00 00 EF } //大括号外出现乱码

二、第二种方式发送,可以收到
1)封装方法
byte[] bytes=Encoding.Default.GetBytes("AA....");
socketTcp.SendData(bytes,X);

2)调试工具收到的数据
9:08:33 收到数据:{41 42 43 44 31 31 30 30 30 34 41 43 46 37 42 43 34 44 30 37 45 46 }ABCD110004ACF7BC4D07EF //大括号外才是实际数据

你可以按第一种方法写,但是你不能只赋值个data[0]啊,从0到11你要每个字节赋值才行呀
第二种就是把一个字符串转成byte数组,如果你真的只有AA,那最终数据也肯定不可能是什么ABCD1100这些

我有段时间也纠结在socket测试方面,这里说说想法:
第一:socket底层是数据流,不是字符串的格式,对其接收到的数据显示,最好按照每个字节去显示,接收到多少数据,显示多少数据(不要用字符串的形式,会有乱码,显示不全等各种问题),比如网上的网络串口工具,收发其实都是有一个ASSII码选项和文本选项。
第二:调试思路: socket的发送和接收是死的,你可以增加打印,抓包,或者debug,对发送数据和接收数据“按字节分析”(理解应该是十六进制的assii码)每个字段,去对比分析问题。

总结来说就是:socket的发送与接收是死的,流的形式,你“按字节分析”(按字符串打印是有问题的)它对应的发送和接收数据排查就好了。

查一下assii码表,看看一个字符,对应的assii码值是多少(十进制,十六进制,八进制注意进制显示),对比分析

从根上理解:字符,在计算机中的存储,其实底层存储的还是一个数字,这个数字其实就是对应的assii码值,然后按照码表,显示成我们看到的字符串(包括回车换行复杂标识),你要通过最底层的交互数据分析问题

这不就是第一种没加编码,第二种用的默认编码