跳转到内容
返回
本页目录

使用文档

SimpleTCPServer 使用文档

SimpleTCPServer 的完整中文产品使用文档

SimpleTCPServer 是一个为 Unreal Engine 设计的轻量级 TCP 服务器插件。
支持多通道监听、动态配置更新,提供完整蓝图 API 用于在运行时管理客户端连接。

  • Unreal Engine 5.2–5.8
  • 版本 1.1.0(Version 2)

启用后插件自动激活。
注册为 GameInstanceSubsystem,其生命周期跨越关卡切换。


可通过 项目设置 → SimpleTCPServer Settings 定义服务器监听通道。
建议用此方法集中管理和调试。

字段名示例说明
Channel NameMainServer蓝图中引用通道的名称
Bind Address (IP:Port)0.0.0.0:8888监听 Socket 绑定的地址
Max Connections32最大并发客户端连接数
Max Receive Bytes1024每条消息的最大缓冲区大小

节点函数说明
BindMessageHandle绑定消息接收委托
UnbindMessageHandle解绑指定委托
UnbindAllMessageHandle解绑所有委托
节点函数说明
BindConnectHandle绑定客户端连接/断开委托
UnbindConnectHandle解绑指定连接委托
UnbindAllConnectHandle解绑所有连接委托
节点函数说明
SendMessage向指定 SessionChannel 发送字节数组
BroadcastMessage向通道上所有连接广播字节数组
节点函数说明
StartServer开始在服务器通道上监听
StopServer停止监听并断开该通道上所有客户端
IsServerRunning检查服务器通道是否正在运行
GetAllSessions获取监听通道上所有当前 SessionChannel
IsSessionConnected检查 Session 是否仍然连接
UpdateTCPServerConfig更新通道配置(支持热重载)
GetTCPServerConfig获取通道的当前配置

类型创建时机销毁时机
监听 Socket调用 StartServer 时调用 StopServer 时
Session Socket接受客户端连接时客户端断开或 Socket 被销毁时

ShowAllFunction


  • 仅支持 IPv4——不支持域名、IPv6 和加密
  • 所有 Socket 由内部管理,无需手动清理
  • 插件跨越关卡切换持续存在,绑定到 GameInstance 生命周期
  • 每个连接的客户端被分配唯一的 SessionChannel,格式为 "IP:Port"

  • 🔌 SimpleTCPClient 插件
    为客户端设计的轻量级插件,适合连接到 SimpleTCPServer 实例。

  • 🧩 SimpleByteConversion 插件 支持原生 Unreal 类型(如 FString、float、int)与 TArray<uint8> 之间的转换,适合构建结构化协议。


原生 TCP 服务端实现

2.3 TCP Server基础实现

监听端口:

bool StartTCPServer(int32 Port)
{
ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
// 创建监听Socket
FSocket* ListenSocket = SocketSubsystem->CreateSocket(NAME_Stream, TEXT("TCP Server"), false);
// 绑定端口
TSharedRef<FInternetAddr> Addr = SocketSubsystem->CreateInternetAddr();
Addr->SetPort(Port);
Addr->SetAnyAddress();
if (!ListenSocket->Bind(*Addr))
{
UE_LOG(LogTemp, Error, TEXT("绑定端口失败: %d"), Port);
return false;
}
// 开始监听(最大8个待连接队列)
if (!ListenSocket->Listen(8))
{
UE_LOG(LogTemp, Error, TEXT("监听失败"));
return false;
}
UE_LOG(LogTemp, Log, TEXT("TCP服务器启动,端口: %d"), Port);
return true;
}

接受客户端连接:

void AcceptClients(FSocket* ListenSocket)
{
ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
TSharedRef<FInternetAddr> ClientAddr = SocketSubsystem->CreateInternetAddr();
FSocket* ClientSocket = ListenSocket->Accept(*ClientAddr, TEXT("TCP Client"));
if (ClientSocket)
{
FString ClientIP = ClientAddr->ToString(false);
int32 ClientPort = ClientAddr->GetPort();
UE_LOG(LogTemp, Log, TEXT("客户端连接: %s:%d"), *ClientIP, ClientPort);
// 存储客户端Socket用于后续通讯
}
}

监听与会话的生命周期

这两段原生示例展示 Bind、Listen 与 Accept,不是 SimpleTCPServer 的蓝图接口。监听 Socket 和已接受 Socket 都需要保存所有权并在失败、停止或断开时释放;示例函数里的局部指针没有组成完整的服务器生命周期。

Listen(8) 设置待接受连接队列,并不是插件允许的总客户端数。IP:Port 能区分网络端点,不能当成长期用户身份或认证。读取客户端数据时仍需要处理字节流分帧、部分读写、超时和权限;多客户端示例也应避免阻塞主线程。

协议选型与共同的线程、重连和字节转换入口见 TCP 客户端与网络通信导览。

原生通信示例于 2025-10-25 发表于博客园。

打开 编辑 → 项目设置,进入 SimpleTCPServer 设置页,将 Language 设置为 English 或 中文。默认语言为英文。面向用户的界面、提示、通知和功能日志会立即更新,无需重启编辑器;公开 API 名称以及模块启动/关闭日志始终保持英文。

如有使用问题或合作需求,请前往联系页面。