使用UE4 TCP Socket Plugin 插件 与报警传感器TCP链接
其中使用7E FF 06 0D 00 00 00 FE ER EF 通讯指令 使传感器播放声音(报警器不响)
使用网络调试助手建立服务器 与UE 链接, 服务器HEX接收信息 收到的是:37 45 20 46 46 20 30 36 20 30 44 20 30 30 20 30 30 20 30 30 20 46 45 20 45 45 20 45 46, 求解决方法UE里向服务器以16进制格式发送
在 TCP Socket Actor 组件中,设置连接的服务器地址和端口。
在需要发送数据的事件中,调用 TCP Socket Actor 组件的 Send Bytes 方法,将需要发送的16进制数据转换为字节数组,并传递给该方法。
以下是使用UE4 TCP Socket Plugin 插件向服务器发送16进制数据的示例代码:
#include "MyActor.h"
#include "TCPActor.h"
#include "Kismet/KismetStringLibrary.h"
void AMyActor::SendHexData()
{
// 获取需要发送的16进制数据
FString HexData = "7EFF060D000000FEEREF";
// 将16进制字符串转换为字节数组
TArray<uint8> ByteArray;
UKismetStringLibrary::Conv_HexStringToBytes(HexData, ByteArray);
// 获取 TCP Socket Actor 组件
UTCPActor* TCPActor = Cast<UTCPActor>(GetComponentByClass(UTCPActor::StaticClass()));
// 发送字节数组
if (TCPActor && TCPActor->IsConnected())
{
TCPActor->SendBytes(ByteArray);
}
}
在该示例代码中,首先使用 Conv_HexStringToBytes 方法将16进制字符串转换为字节数组,然后通过 Send Bytes 方法发送字节数组。
在上述示例代码中,需要注意的是,16进制字符串的格式应该为没有空格的连续字符,如示例代码中的 "7EFF060D000000FEEREF",而非网络调试助手中显示的每两个字符之间有一个空格的格式。
在UE4中以16进制格式发送TCP消息,您可以使用FArrayWriter类和FTcpSocketBuilder类。
以下是一个简单的例子:
//创建一个FArrayWriter对象,用于写入16进制数据
FArrayWriter Writer;
//向FArrayWriter中写入16进制数据
uint8 HexData[] = {0x7E, 0xFF, 0x06, 0x0D, 0x00, 0x00, 0x00, 0xFE, 0x45, 0x52, 0xEF};
Writer.Append(HexData, sizeof(HexData));
//创建FTcpSocketBuilder对象,并配置TCP连接参数
FTcpSocketBuilder SocketBuilder(TEXT("127.0.0.1"), 9000);
//创建一个TCP套接字
FSocket* Socket = SocketBuilder.Build();
//连接到服务器
Socket->Connect(SocketBuilder.GetConnectionInfo());
//向服务器发送16进制数据
Socket->Send(Writer.GetData(), Writer.Num(), ESocketSendFlags::None);
//关闭TCP连接
Socket->Close();
在上述代码中,FArrayWriter用于写入16进制数据,FTcpSocketBuilder用于配置TCP连接参数,FSocket用于创建TCP套接字并连接到服务器,然后使用Socket->Send()方法将16进制数据发送到服务器。需要注意的是,您需要将代码中的IP地址和端口号修改为您实际使用的服务器地址和端口号。
同时,建议您在网络调试助手中确认您的通讯指令的16进制格式是否正确。