Study/Project

VV 2. 서버와의 연결

에린_1 2024. 10. 24. 00:01
728x90

서버와의 연결

간단한 로그인 UI를 만들었고, 이번에는 C++서버와의 연결을 준비했다. C++ 서버의 경우 최흥배님의 깃헙을 참조해 사용했다.

NetworkManager

  • NetworkManager
    • MyGameInstance에서 다 해결해주는 것이 아니라, 서버와의 연결을 담당해줄 클래스를 만들어 주었다.
      • NetworkManager.h
      //NetworkManager.h
      UCLASS()
      class VERSUSVILLAGE_API UNetworkManager : public UObject
      {
      	GENERATED_BODY()
      	
      public:
      	bool ConnectToServer(FString ServerAddress, int32 Port);
      	void SendData(FString DataToSend);
      
      private:
      	class FSocket* ClientSocket;
      };
      
      • NetworkManager.cpp
      //NetworkManager.cpp
      // Fill out your copyright notice in the Description page of Project Settings.
      
      #include "NetworkManager.h"
      #include "Networking/Public/Networking.h"
      #include "Sockets.h"
      #include "SocketSubsystem.h"
      #include "Interfaces/IPv4/IPv4Address.h"
      
      bool UNetworkManager::ConnectToServer(FString ServerAddress, int32 Port)
      {
      	FIPv4Address Ip;
      	FIPv4Address::Parse(ServerAddress, Ip);
      
      	TSharedRef<FInternetAddr> Addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();
      	Addr->SetIp(Ip.Value);
      	Addr->SetPort(Port);
      
      	ClientSocket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("Default"), false);
      	if (ClientSocket->Connect(*Addr))
      	{
      		UE_LOG(LogTemp, Log, TEXT("Succ ConnectToServer"));
      		return true;
      	}
      	else
      	{
      		UE_LOG(LogTemp, Log, TEXT("Fail ConnectToServer"));
      		return false;
      	}
      
      }
      
      void UNetworkManager::SendData(FString DataToSend)
      {
      	if (ClientSocket)
      	{
      		TCHAR* SerializedChar = DataToSend.GetCharArray().GetData();
      		int32 Size = FCString::Strlen(SerializedChar);
      		int32 Sent = 0;
      
      		ClientSocket->Send((uint8*)TCHAR_TO_UTF8(SerializedChar), Size, Sent);
      		UE_LOG(LogTemp, Log, TEXT("Succ SendData"));
      	}
      }
      
    • 여러 트러블 슈팅을 겪었지만 성공적으로 서버와의 연결을 성공 할 수 있었다.
  • 아오.. 되게 한게 없이 짧지만 트러블 슈팅 때문에 너무 많은 시간을 잡아 먹었다.. 쉽지않아 쉽지않아
728x90