- 1. 添加Socket库和NetWorking库
- 2. 一个实用网络类
打开该文件
添加Sockets和Networking
关闭引擎,退出,重新开始
此时,你将会成功 的引入网络库
2. 一个实用网络类// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "HAL/Runnable.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Sockets.h"
#include "Sockets.h"
#include "SocketSubsystem.h"
#include "Networking/Public/Interfaces/IPv4/IPv4Address.h"
#include "SocketSubsystem.h"
class FRunableThread;
class AClient : public FRunnable
{
public:
// Sets default values for this actor's properties
AClient();
virtual bool Init();
virtual uint32 Run() override;
virtual void Stop() override;
virtual void Exit() override;
FSocket* socket;
bool SocketCreate(FString IPStr, int32 port);
//int byte2 Buffer();
FIPv4Address ip;
~AClient();
TQueue messages;
FRunnableThread* Thread = nullptr;
int32 stop = false;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "Client.h"
AClient::AClient()
{
this->SocketCreate("127.0.0.1", 9201);
Thread = FRunnableThread::Create(this, TEXT("This is my thread example"));
stop = 1;
}
bool AClient::Init()
{
stop = 1;
return true;
}
uint32 AClient::Run() {
TArray buffer;
uint8 element = 0;
while (stop == 1)
{
int32 len = 0;
buffer.Init(element, 1024);
socket->Recv(buffer.GetData(),buffer.Num(),len);
auto val = FString(ANSI_TO_TCHAr(reinterpret_cast(buffer.GetData())));
UE_LOG(LogTemp, Warning, TEXT("server info %s,%d,%d"), *val,len,stop)
FPlatformProcess::Sleep(0.1);
}
UE_LOG(LogTemp, Warning, TEXT("thread end..."));
return 1;
}
void AClient::Stop()
{
stop = 0;
socket->Close();
}
void AClient::Exit()
{
}
bool AClient::SocketCreate(FString IPStr, int32 port)
{
FIPv4Address::Parse(IPStr, ip);
TSharedPtr addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();
addr->SetIp(ip.Value);
addr->SetPort(port);
socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("default"), false);
if (socket->Connect(*addr))
{
UE_LOG(LogTemp, Warning, TEXT("Connect Succeed!"));
return true;
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Connect Failed!"));
return false;
}
}
AClient::~AClient()
{
UE_LOG(LogTemp,Warning, TEXT("Client Destruct"))
stop = 0;
}



