UE5 独立程序的网络TCP/UDP服务器与客户端基础流程

这篇具有很好参考价值的文章主要介绍了UE5 独立程序的网络TCP/UDP服务器与客户端基础流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

 修改.Build.cs内容

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

修改Target.cs内容 

 UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

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

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维

刷新引擎

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程,服务器,ue5,运维在项目.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<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"));

		// 创建一个字节数组用于存储接收到的数据
		uint8 Buf[1024]{0};
		//存储实际读取到的字节数
		int32 BytesRead = 0;

		// 从客户端套接字读取数据到Buf数组中,最多读取1024字节,并将实际读取的字节数存储在BytesRead中
		ClinetSocket->Recv(Buf,1024,BytesRead);

		// 将接收到的字节数组转换为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; // 假设这是你的套接字列表  
  
// 遍历套接字列表  
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<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;
}

未完待续。。。文章来源地址https://www.toymoban.com/news/detail-799328.html

到了这里,关于UE5 独立程序的网络TCP/UDP服务器与客户端基础流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《TCP/IP网络编程》阅读笔记--基于UDP的服务器端/客户端

    目录 1--TCP和UDP的主要区别 2--基于 UDP 的数据 I/O 函数 3--基于 UDP 的回声服务器端/客户端 4--UDP客户端Socket的地址分配 5--UDP存在数据边界 6--UDP已连接与未连接的设置 ① TCP 提供的是可靠数据传输服务,而 UDP 提供的是不可靠数据传输服务; ② UDP 在结构上比 TCP 更简洁,其不会

    2024年02月09日
    浏览(61)
  • 简单的UDP网络程序·续写(后端服务器)

    该文承接文章 简单的UDP网络程序 对于客户端和服务端的基本源码参考上文,该文对服务器润色一下,并且实现几个基本的业务服务逻辑 目录 demo1 第一个功能:字典翻译 初始化字典 测试代码:打印 字符串分割 客户端修改 成品效果 字典热加载 signal demo2 远端命令行解析 p

    2024年02月09日
    浏览(45)
  • UE5.1 像素流送公网部署无需GPU服务器

    因为工作需要最近在做虚幻引擎5.1这方面的部署,简单记录一下最近学习的一点知识。 本文参考:虚幻引擎官网文档 UE5像素流送原理及多用户公网部署小白教程202211022220 像素流送就是在云端服务器上运行虚幻引擎应用程序,通过WebRTC将渲染的帧和音频流送到浏览器和移动设

    2024年02月07日
    浏览(49)
  • 【UE5 Cesium】14-Cesium for Unreal 加载服务器上的倾斜摄影

    目录 前言  步骤 一、下载安装tomcat 10 二、下载安装JDK 三、启动Tomcat 四、Tomcat加载倾斜摄影 五、UE中加载Tomcat上的倾斜摄影         上一篇文章(【UE5 Cesium】13-Cesium for Unreal 加载本地倾斜摄影)介绍了如何在UE中加载本地倾斜摄影,本文在该文章基础上继续介绍如何在将

    2024年02月12日
    浏览(49)
  • 【网络编程】基于UDP数据报实现回显服务器/客户端程序

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 前言 我们如果想让应用程序进行网络通信的话,就需要调用传

    2024年02月04日
    浏览(54)
  • 简单的TCP网络程序·线程池(后端服务器)

    目录 版本四:线程池 注意事项 文件:Task.hpp -- 任务单独为一个文件 组件:日志修改 新函数:vprintf() 可变参数的提取逻辑 vfprintf()的工作原理 初始化一个va_list 日志准备 获取时间小知识 日志初版 日志启动测试 TCP通用服务器(守护进程) * 新指令1:jobs -- 查看进程作业 新指令

    2024年02月09日
    浏览(43)
  • 简单的TCP网络程序·单进程(后端服务器)

    目录 文件1:tcpServer.cc 文件2:tcpServer.hpp 1.提出日志概念 -- 在后续完善 日志格式 -- 暂定简单的打印功能 2.创建套接字 SOCK_STREAM -- socket参数 3.bind自己的套接字 4.设置socket 为监听状态 * 新接口1:listen 函数1:initServer() 新接口2:accept * 接口1:read 接口2:write 文件描述符本质是

    2024年02月11日
    浏览(49)
  • UE5 C++ Slate独立程序的打包方法

     在源码版安装目录内找到已编译通过的xxx.exe,(EngineBinariesWin64xxx.exe),在需要的位置新建文件夹,拷贝源码版Engine内的Binaries、Content、Shaders文件夹到目标文件夹内,将xxx.exe放入对应位置,删除目标文件夹内Binaries、Content、Shaders中多余的文件夹,运行xxx.exe测试

    2024年01月23日
    浏览(52)
  • 云服务器:开放TCP、UDP端口

            众所周知,电脑设备有些端口默认是不开放的,我们使用TCP或者UDP去连接没有开放端口时就会被防火墙拦截,所以就需要到电脑防火墙设置里面把需要用到的端口开放出来。操作如下:         1.打开防火墙(可以直接搜索)         2.新建规则       

    2024年02月03日
    浏览(54)
  • Linux下TCP网络服务器与客户端通信程序入门

    实现客户端连接服务器,通过终端窗口发送信息给服务器端,服务器接收到信息后对信息数据进行回传,客户端读取回传信息并返回。 服务器当前IP地址要知道 建立socket 绑定本地IP地址并设置端口号 知道服务器的IP地址和端口号 然后进行连接

    2024年02月14日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包