// TCP Client (UE4)

// send FString
FString message = "welcome to here";
TCHAR* seriallizedChar = message.GetCharArray().GetData();
int32 size = FCString::Strlen(seriallizedChar) + 1;
int32 sentByte = 0;
HostSock->Send((uint8*)TCHAR_TO_UTF8(seriallizedChar), size, sentByte);

// recv FString
TArray<uint8> ReceiveData;
uint32 size = 1024u;
HostSock->HasPendingData(size);
ReceiveData.Init(0, FMath::Min(size, 65507u));
int32 readByte = 0;	
HostSock->Recv(ReceiveData.GetData(), ReceiveData.Num(), readByte);
UE_LOG(LogTemp, Warning, TEXT("Data Bytes Read : %s Byte."), *FString::FromInt(readByte));
FString ReceivedUE4String = "Data : " + FString(ANSI_TO_TCHAR(reinterpret_cast<const char*>(ReceiveData.GetData()))); // byte to char
UE_LOG(LogTemp, Warning, TEXT("%s"), *ReceivedUE4String);

// send TArray<float>
TArray<float> data;
int32 ByteSent = 0;
FArrayWriter writer;

for (int i=0; i<data.Num(); i++)
{
 writer << data[i];
}	

HostSock->Send(writer.GetData(), writer.Num(), ByteSent)

// recv float
TArray<uint8> ReceiveData;
uint32 size = 1024u;
HostSock->HasPendingData(size);
ReceiveData.Init(0, FMath::Min(size, 65507u));
int32 readByte = 0;
float decodeFloat[8]; // how many float data
HostSock->Recv(ReceiveData.GetData(), ReceiveData.Num(), readByte);
UE_LOG(LogTemp, Warning, TEXT("Data Bytes Read : %s Byte."), *FString::FromInt(readByte));

for (int i = 0; i< readByte / 4; i++)
{
 TArray<uint8> binaryData;
 binaryData.Add(ReceiveData.GetData()[(0 + i * 4) + 0]);
 binaryData.Add(ReceiveData.GetData()[(0 + i * 4) + 1]);
 binaryData.Add(ReceiveData.GetData()[(0 + i * 4) + 2]);
 binaryData.Add(ReceiveData.GetData()[(0 + i * 4) + 3]);
 decodeFloat[i] = *reinterpret_cast<float*>(binaryData.GetData()); // byte to float
 ReceivedUE4String += FString::SanitizeFloat(decodeFloat[i]) + ", "; 
}

UE_LOG(LogTemp, Warning, TEXT("%s"), *ReceivedUE4String);