UE进阶实例38(UE Socket网络编程)


非常感谢匿名大哥一直对我的支持,本文内容由他赞助
在这里插入图片描述
该Socket可以用于小型或创业型公司的网络服务器,可以用于VR、游戏等领域,代码纯绿色、效率一手自测验证,直接贴代码


如果有遇到断开客户端,服务器无法检测的问题
Socket->GetConnectionState()判定有问题,可以使用自己的Ping来判定
https://forums.unrealengine.com/t/fsocket-getconnectionstate-always-returns-true/345349/3

UPD Server&Client参考
https://github.com/is-centre/udp-ue4-plugin-win64


#. 使用自定义参数加入Server

void AJoinPlayerController::JoinWithParams(int p1, FString& p2)
{
   
	const FString URLWithParams = FString::Printf(TEXT("127.0.0.1:7777?Param1=%d?Param2=%s"), p1, *p2);
	ClientTravel(URLWithParams, ETravelType::TRAVEL_Absolute);
}

FString AJoinServerParamsGameModeBase::InitNewPlayer(APlayerController* NewPlayerController, 
													 const FUniqueNetIdRepl& UniqueId, 
													 const FString& Options, 
													 const FString& Portal)
{
   
	GLog->Logf(TEXT("-------------Options:%s"), *Options);
	TArray<FString> Params;
	Options.ParseIntoArray(Params, TEXT("?"), true);

	int Count = 0;
	for (FString Param : Params)
	{
   
		FString Key, Value;
		Param.Split(TEXT("="), &Key, &Value);
		GLog->Logf(TEXT("-------------Param%d>>>[%s]:[%s]"), Count, *Key, *Value);
		Count++;
	}
	
	return Super::InitNewPlayer(NewPlayerController, UniqueId, Options, Portal);
}


#. UE4.27+新加入FUdpSocketReceiver

	int32 BytesSent = 0;

	FArrayWriter Writer;
	Writer << data;
	SenderSocket->SendTo(Writer.GetData(), Writer.Num(), BytesSent, *RemoteAddr);

	if (BytesSent <= 0)
	{
   
		UE_LOG(LogTemp, Error, TEXT("Socket exists, but receiver did not accept any packets."));
		return false;
	}
	Receiver = new FUdpSocketReceiver(ListenSocket, ThreadWaitTime, TEXT("UDP Receiver"));
	Receiver->OnDataReceived().BindUObject(this, &AUDPReceiver::Recv);
	Receiver->Start();
	
	FUDPData data;
	*ArrayReaderPtr << data;

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Networking.h"
#include "IPAddress.h"
#include "TCPServer.generated.h"

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTCPEventSignature, int, Port);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTCPMessageSignature, const TArray<uint8>&, Bytes);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTCPClientSignture, const FString&, Client);

struct FTCPClient
{
   
	FSocket* Socket;
	FString Address;

	bool operator == (const FTCPClient& Other)
	{
   
		return Address == Other.Address;
	}
};

UCLASS(Blueprintable)
class UESOCKET_API ATCPServer : public AActor
{
   
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ATCPServer();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	FTCPMessageSignature OnReceivedBytes;
	UPROPERTY(BlueprintAssignable, BlueprintReadWrite)
	FTCPEventSignature OnListenBegin;
	FTCPEventSignature OnListenEnd;

	FTCPClientSignture OnClientConnected;
	FTCPClientSignture OnClientDisconnected;

	int32 ListenPort;
	FString ListenSocketName;
	int32 BufferMaxSize;

	bool bShouldAutoListen;
	bool bReceiveDataOnGameThread;
	bool bDisconnectOnFailedEmit;
	bool bShouldPing;
	float PingInterval;
	FString PingMessage;
	bool bIsConnected;
	
	void StartListenServer(const FString Ipv4, const int32 InListenPort = 3001);
	void StopListenServer()
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Unreal Engine 5 (UE5)中部署WebSocket服务器可以通过使用UE自带的网络系统来实现。首先,您需要创建一个新项目,并在项目中添加一个C++或Blueprint类,用于处理WebSocket连接。然后,在处理类中添加WebSocket相关的代码,包括建立连接、发送和接收消息等功能。接下来,您需要在项目中添加WebSocket模块,并在项目设置中启用该模块。最后,在运行时启动WebSocket服务器即可。 如果您遇到了UE5中使用Socket.IO Client的问题,有一些解决方案可供尝试。首先,在Plugins文件夹中找到对应插件的.uplugin文件,确保"EnabledByDefault"设置为false,"Installed"设置为true。另外,如果您在打包UDP插件时遇到报错,可能是因为缺少SIOJson模块。请确保插件已正确安装,或者考虑禁用该插件。 总之,使用UE5部署WebSocket服务器需要创建项目、添加处理类和代码、启用WebSocket模块,并在运行时启动服务器。如果遇到问题,可以尝试检查插件设置或禁用相关插件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ue5如何部署websocket](https://blog.csdn.net/weixin_42605397/article/details/129497428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [解决UE5项目打包,使用UDP、SocketIO插件报错的问题](https://blog.csdn.net/canglangzhishuiV/article/details/127621476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值