UE5 独立程序的网络TCP/UDP服务器与客户端基础流程
创始人
2025-01-19 22:03:19
0次

引擎源码版,复制\Engine\Source\Programs\路径下的BlankProgram空项目示例。

重命名BlankProgram,例如CustomTcpProgram,并修改项目名称。

 修改.Build.cs内容

修改Target.cs内容 

 

 修改Private文件夹内.h.cpp文件名并修改.cpp内容

刷新引擎

在项目.Build.cs中加入模块

// Copyright Epic Games, Inc. All Rights Reserved.  using UnrealBuildTool;  public class TCPSocketServer : ModuleRules { 	public TCPSocketServer(ReadOnlyTargetRules Target) : base(Target) 	{ 		PublicIncludePathModuleNames.Add("Launch"); 		PrivateDependencyModuleNames.Add("Core"); 		PrivateDependencyModuleNames.Add("Projects");         //加入网络模块 		PrivateDependencyModuleNames.Add("Sockets"); 		PrivateDependencyModuleNames.Add("ApplicationCore");  		// to link with CoreUObject module: 		// PrivateDependencyModuleNames.Add("CoreUObject");  		// to enable tracing: 		// AppendStringToPublicDefinition("UE_TRACE_ENABLED", "1");  		// to enable LLM tracing: 		// GlobalDefinitions.Add("LLM_ENABLED_IN_CONFIG=1"); 		// GlobalDefinitions.Add("UE_MEMORY_TAGS_TRACE_ENABLED=1"); 	} } 

 .cpp

// Copyright Epic Games, Inc. All Rights Reserved.  #include "TCPSocketServer.h"  #include "RequiredProgramMainCPPInclude.h" #include "Sockets.h" #include "SocketSubsystem.h"  DEFINE_LOG_CATEGORY_STATIC(LogTCPSocketServer, Log, All);  IMPLEMENT_APPLICATION(TCPSocketServer, "TCPSocketServer");  INT32_MAIN_INT32_ARGC_TCHAR_ARGV() { 	//应用初始化设置   	GEngineLoop.PreInit(ArgC,ArgV);  	// 获取网络套接字子系统 	ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM); 	// 创建一个TCP类型的套接字,命名为"This TcpIp Type" 	FSocket* Socket = SocketSubsystem->CreateSocket(NAME_Stream,TEXT("This TcpIp Type"));  	// 创建一个互联网地址对象,用于指定服务器的IP地址和端口号 	TSharedPtr Addr = SocketSubsystem->CreateInternetAddr();  	Addr->SetPort(8888);  	bool bIsValid = false; 	Addr->SetIp(TEXT("127.0.0.1"),bIsValid); 	 	Socket->Bind(*Addr);  	Socket->Listen(128); 	 	while (true) 	{ 		// 接受一个新的客户端连接请求,并返回一个新的套接字对象来表示这个连接 		FSocket* ClinetSocket = Socket->Accept(TEXT("ClinetConnect"));  		// 创建一个字节数组用于存储接收到的数据 		uint8 Buf[1024]{0}; 		//存储实际读取到的字节数 		int32 BytesRead = 0;  		// 从客户端套接字读取数据到Buf数组中,最多读取1024字节,并将实际读取的字节数存储在BytesRead中 		ClinetSocket->Recv(Buf,1024,BytesRead);  		// 将接收到的字节数组转换为TCHAR字符串(用于UE5的字符串处理) 		FString Msg = UTF8_TO_TCHAR(reinterpret_cast(Buf));  		UE_LOG(LogTCPSocketServer,Display,TEXT("Msg = %s||Len = %d"),*Msg,BytesRead); 	} } /* *TArray Sockets; // 假设这是你的套接字列表      // 遍历套接字列表   for (int i = 0; i < Sockets.Num(); i++)   {   FSocket* Socket = Sockets[i];   FInternetAddr* RemoteAddr = Socket->GetRemoteAddress();          // 获取远程地址的IP和端口号   FString IP;   uint16 Port;   RemoteAddr->GetIP(IP);   RemoteAddr->GetPort(Port);          // 使用IP和端口号进行进一步的处理或记录等操作   UE_LOG(LogTCPSocketServer, Display, TEXT("Client IP: %s, Port: %d"), *IP, Port);   } */ 

客户端.cpp

// Copyright Epic Games, Inc. All Rights Reserved.  #include "TCPSocketClient.h"  #include "RequiredProgramMainCPPInclude.h" #include "Sockets.h" #include "SocketSubsystem.h"  DEFINE_LOG_CATEGORY_STATIC(LogTCPSocketClient, Log, All);  IMPLEMENT_APPLICATION(TCPSocketClient, "TCPSocketClient");  INT32_MAIN_INT32_ARGC_TCHAR_ARGV() { 	GEngineLoop.PreInit(ArgC,ArgV);  	ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);  	FSocket* Socket = SocketSubsystem->CreateSocket(NAME_Stream,TEXT("This Tcp Client"));  	TSharedPtr Addr = SocketSubsystem->CreateInternetAddr(); 	 	Addr->SetPort(8888); 	bool bIsValid = false; 	Addr->SetIp(TEXT("127.0.0.1"),bIsValid);  	if (Socket->Connect(*Addr)) 	{ 		FString Msg = TEXT("Hello Server"); 		int32 SendSize = 0; 		Socket->Send(reinterpret_cast(TCHAR_TO_UTF8(*Msg)),Msg.Len(),SendSize); 	}  	Socket->Close(); 	SocketSubsystem->DestroySocket(Socket);  	UE_LOG(LogTCPSocketClient, Display, TEXT("Hello World")); 	 	FEngineLoop::AppExit(); 	return 0; } 

未完待续。。。

相关内容

热门资讯

微扑克辅助器!德州平台有没有挂... 您好:德州平台有没有挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌...
AApoker透视挂!wepo... 很多人使用云端 AI 时,都担心wepoker透视挂是真的吗、内部资料上传带来隐私风险。这款本地运行...
WePoKer透视!wepok... WePoKer透视!wepoker如何拿到好牌,分享透视多功能软件APP模板;近期一款 AI 黑科技...
红龙扑克透视挂!德扑之星规律,... 红龙扑克透视挂!德扑之星规律,解迷透视挂多功能插件APP法门是一款可以让一直输的玩家,快速成为一个“...
aapoker透视!WePoK... 您好,WePoKer有没有透视软件挂这款游戏可以开挂的,确实是有挂的,需要了解加微【48527505...
红龙扑克开挂!微扑克的辅助工具... 很多人使用云端 AI 时,都担心微扑克的辅助工具有哪些、内部资料上传带来隐私风险。这款本地运行的 A...
aapoker辅助!wepok... 您好:wepoker私人局怎么设置抽水这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会...
aapoker辅助挂!wepo... aapoker辅助挂!wepoker透视挂安全吗,普及辅助挂多功能方法APP策略AI 智能体黑科技再...
红龙PoKer辅助挂!wepo... 您好:wepokerplus透视挂真的假的这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌...
德扑之星辅助挂!德州ai辅助有... 德扑之星辅助挂!德州ai辅助有用吗,详细辅助挂多功能下载APP指南书是一款可以让一直输的玩家,快速成...