引擎源碼版,復(fù)制\Engine\Source\Programs\路徑下的BlankProgram空項目示例。
重命名BlankProgram,例如CustomTcpProgram,并修改項目名稱。
?修改.Build.cs內(nèi)容
修改Target.cs內(nèi)容?
?
?修改Private文件夾內(nèi).h.cpp文件名并修改.cpp內(nèi)容
刷新引擎
在項目.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");
//加入網(wǎng)絡(luò)模塊
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()
{
//應(yīng)用初始化設(shè)置
GEngineLoop.PreInit(ArgC,ArgV);
// 獲取網(wǎng)絡(luò)套接字子系統(tǒng)
ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
// 創(chuàng)建一個TCP類型的套接字,命名為"This TcpIp Type"
FSocket* Socket = SocketSubsystem->CreateSocket(NAME_Stream,TEXT("This TcpIp Type"));
// 創(chuàng)建一個互聯(lián)網(wǎng)地址對象,用于指定服務(wù)器的IP地址和端口號
TSharedPtr<FInternetAddr> 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"));
// 創(chuàng)建一個字節(jié)數(shù)組用于存儲接收到的數(shù)據(jù)
uint8 Buf[1024]{0};
//存儲實際讀取到的字節(jié)數(shù)
int32 BytesRead = 0;
// 從客戶端套接字讀取數(shù)據(jù)到Buf數(shù)組中,最多讀取1024字節(jié),并將實際讀取的字節(jié)數(shù)存儲在BytesRead中
ClinetSocket->Recv(Buf,1024,BytesRead);
// 將接收到的字節(jié)數(shù)組轉(zhuǎn)換為TCHAR字符串(用于UE5的字符串處理)
FString Msg = UTF8_TO_TCHAR(reinterpret_cast<char *>(Buf));
UE_LOG(LogTCPSocketServer,Display,TEXT("Msg = %s||Len = %d"),*Msg,BytesRead);
}
}
/*
*TArray<FSocket*> Sockets; // 假設(shè)這是你的套接字列表
// 遍歷套接字列表
for (int i = 0; i < Sockets.Num(); i++)
{
FSocket* Socket = Sockets[i];
FInternetAddr* RemoteAddr = Socket->GetRemoteAddress();
// 獲取遠(yuǎn)程地址的IP和端口號
FString IP;
uint16 Port;
RemoteAddr->GetIP(IP);
RemoteAddr->GetPort(Port);
// 使用IP和端口號進(jìn)行進(jìn)一步的處理或記錄等操作
UE_LOG(LogTCPSocketServer, Display, TEXT("Client IP: %s, Port: %d"), *IP, Port);
}
*/
客戶端.cpp文章來源:http://www.zghlxwxcb.cn/news/detail-799328.html
// 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<FInternetAddr> 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<uint8*>(TCHAR_TO_UTF8(*Msg)),Msg.Len(),SendSize);
}
Socket->Close();
SocketSubsystem->DestroySocket(Socket);
UE_LOG(LogTCPSocketClient, Display, TEXT("Hello World"));
FEngineLoop::AppExit();
return 0;
}
未完待續(xù)。。。文章來源地址http://www.zghlxwxcb.cn/news/detail-799328.html
到了這里,關(guān)于UE5 獨立程序的網(wǎng)絡(luò)TCP/UDP服務(wù)器與客戶端基礎(chǔ)流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!