Compiler error on Rama's tutorial UDP Socket

I’m following this I’m following this tutorial (Rama’s UDP_Socket_Sender_Receiver_From_One_UE4_Instance_To_Another) and I’ve encountered the following compiler errors.

I didn’t change anything from the tutorial.

Just in case, I’m using VS 2015 and UE 4.13.2.

Any help appreciated, thanks in advance.

VS 2015 output:
1>  UDPSendReceive.generated.cpp
1>  Module.UDPSendReceive.cpp
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private/RamaUDPReceiver.h(14): error C2079: "RamaUDPReceiver_eventBPEvent_DataReceived_Parms::ReceivedData" verwendet undefiniertes struct "FAnyCustomData"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Intermediate\Build\Win64\UE4Editor\Inc\UDPSendReceive\UDPSendReceive.generated.cpp(16): error C2440: "=": "const FAnyCustomData" kann nicht in "int" konvertiert werden
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Intermediate\Build\Win64\UE4Editor\Inc\UDPSendReceive\UDPSendReceive.generated.cpp(16): note: Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
1>d:\unreal projects\myproject\plugins\udpsendreceive\source\udpsendreceive\private\RamaUDPReceiver.h(14): error C2079: "RamaUDPReceiver_eventBPEvent_DataReceived_Parms::ReceivedData" verwendet undefiniertes struct "FAnyCustomData"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPReceiver.cpp(76): error C2079: "Data" verwendet undefiniertes struct "FAnyCustomData"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPReceiver.cpp(80): error C2664: "void ARamaUDPReceiver::BPEvent_DataReceived(const FAnyCustomData &)" : Konvertierung von Argument 1 von "int" in "const FAnyCustomData &" nicht möglich
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPReceiver.cpp(80): note: Ursache: Konvertierung von "int" in "const FAnyCustomData" nicht möglich
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPReceiver.cpp(80): note: Der nicht definierte Typ "FAnyCustomData" wird verwendet.
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Intermediate\Build\Win64\UE4Editor\Inc\UDPSendReceive\RamaUDPReceiver.generated.h(11): note: Siehe Deklaration von "FAnyCustomData"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(35): error C2511: "bool ARamaUDPSender::StartUDPSender(const FString &,const FString &,const int32)": Überladene Memberfunktion nicht in "ARamaUDPSender" gefunden
1>  d:\unreal projects\myproject\plugins\udpsendreceive\source\udpsendreceive\private\RamaUDPSender.h(15): note: Siehe Deklaration von "ARamaUDPSender"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(37): error C2597: Ungültiger Verweis auf nicht-statischen Member "ARamaUDPSender::RemoteAddr"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(40): error C2227: Links von "->SetIp" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(41): error C2227: Links von "->SetPort" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(45): error C2352: "ARamaUDPSender::ScreenMsg": Unzulässiger Aufruf einer nicht statischen Memberfunktion
1>  d:\unreal projects\myproject\plugins\udpsendreceive\source\udpsendreceive\private\RamaUDPSender.h(51): note: Siehe Deklaration von "ARamaUDPSender::ScreenMsg"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(52): error C2597: Ungültiger Verweis auf nicht-statischen Member "ARamaUDPSender::SenderSocket"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(59): error C2227: Links von "->SetSendBufferSize" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(60): error C2227: Links von "->SetReceiveBufferSize" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(80): error C2079: "NewData" verwendet undefiniertes struct "FAnyCustomData"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(81): error C2228: Links von ".Scale" müssen sich in einer Klasse/Struktur/Union befinden
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(81): note: Typ ist "int"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(82): error C2228: Links von ".Count" müssen sich in einer Klasse/Struktur/Union befinden
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(82): note: Typ ist "int"
1>D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(83): error C2228: Links von ".Color" müssen sich in einer Klasse/Struktur/Union befinden
1>  D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Source\UDPSendReceive\Private\RamaUDPSender.cpp(83): note: Typ ist "int"
1>ERROR : UBT error : Failed to produce item: D:\Unreal Projects\MyProject\Plugins\UDPSendReceive\Binaries\Win64\UE4Editor-UDPSendReceive.dll
1>  Total build time: 45,36 seconds

THX, compiler errors are gone…
Now the problem is i try to send a string from python over udp to bpeventreceived…to print string bp-node…

ScreenMsg(“As String!!! ~>”, ReceivedData); works!!
but
BPEvent_DataReceived(ReceivedData); prints crazy signs…

pls help…

udpreceiver cpp:

/*
 
	RamaUDPReceiver
 
	by Rama

*/
#include "UDPSendReceivePrivatePCH.h"
#include "RamaUDPReceiver.h"
#include "Async.h"
#include <string>
 
ARamaUDPReceiver::ARamaUDPReceiver(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{	
	ListenSocket = NULL;
}
 
void ARamaUDPReceiver::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
	Super::EndPlay(EndPlayReason);
	//~~~~~~~~~~~~~~~~

	//UDPReceiver.stop();
	delete UDPReceiver;
	UDPReceiver = nullptr;
 
	//Clear all sockets!
	//		makes sure repeat plays in Editor dont hold on to old sockets!
	if(ListenSocket)
	{
		ListenSocket->Close();
		ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->DestroySocket(ListenSocket);
	}
}
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Rama's Start TCP Receiver
bool ARamaUDPReceiver::StartUDPReceiver(
	const FString& YourChosenSocketName,
	const FString& TheIP, 
	const int32 ThePort
){
 
	ScreenMsg("RECEIVER INIT");
 
	//~~~
	//const FString& NewYourChosenSocketName = "RamaSocketListener"; //kill
	//const FString& NewTheIP = "127.0.0.1";//kill
	//const int32 NewThePort = 8890; //kill
 
	FIPv4Address Addr;
	FIPv4Address::Parse(TheIP, Addr);
	//FIPv4Address::Parse(NewTheIP, Addr);
 
	//Create Socket
	FIPv4Endpoint Endpoint(Addr, ThePort);
	//FIPv4Endpoint Endpoint(Addr, NewThePort);
 
	//BUFFER SIZE
	int32 BufferSize = 2*1024*1024;

	ListenSocket = FUdpSocketBuilder(*YourChosenSocketName)
	//ListenSocket = FUdpSocketBuilder(*NewYourChosenSocketName)
		.AsNonBlocking()
		.AsReusable()
		.BoundToEndpoint(Endpoint)
		.WithReceiveBufferSize(BufferSize);
	;
 
	FTimespan ThreadWaitTime = FTimespan::FromMilliseconds(100);
	UDPReceiver = new FUdpSocketReceiver(ListenSocket, ThreadWaitTime, TEXT("UDP RECEIVER"));
	UDPReceiver->OnDataReceived().BindUObject(this, &ARamaUDPReceiver::Recv); 
	UDPReceiver->Start();
 
	return true;
}

void ARamaUDPReceiver::Recv(const FArrayReaderPtr& ArrayReaderPtr, const FIPv4Endpoint& EndPt)
{
	ScreenMsg("Received bytes", ArrayReaderPtr->Num() );

	//Binary Array!
	//TArray<uint8> Data = ArrayReaderPtr;
	//*ArrayReaderPtr << Data;		//Now de-serializing! See AnyCustomData.h

	//blog.csdn.net/chinahaerbin/article/details/51075743
	uint8 data[512];
	FMemory::Memzero(data, 512);

	FMemory::Memcpy(data, ArrayReaderPtr->GetData(), ArrayReaderPtr->Num());
	FString ReceivedData = ((const char*)data);

	ScreenMsg("As String!!!!! ~>", ReceivedData);
 
	//BP Event
	AsyncTask(ENamedThreads::GameThread, [&]() {
		BPEvent_DataReceived(ReceivedData); // call your event this way so it'll be executed on game thread
	 });
	//BP Event
	//BPEvent_DataReceived(Data);
}

void ARamaUDPReceiver::BeginPlay()  
{  
	// Call the base class  
	Super::BeginPlay(); 

	// Store our initial location  
	//ActorOrigin = GetActorLocation();  

    //IP = 127.0.0.1, Port = 8890 for my Python test case
	if( ! StartUDPReceiver("RamaSocketListener", "127.0.0.1", 8890))
	{
		//UE_LOG  "TCP Socket Listener Created!"
		return;
	}
	//UE_LOG  "TCP Socket Listener Created! Yay!"

}  

udpreceiver h:

/*
 
	By Rama
 
*/
#pragma once

//Networking
#include "Networking.h"
//Base
#include "RamaUDPReceiver.generated.h"

UCLASS()
class ARamaUDPReceiver : public AActor
{
	GENERATED_UCLASS_BODY()
 
//====================================================
//		Data Received Events!
public:
	/** Data has been received!! */
	UFUNCTION(BlueprintImplementableEvent)
	void BPEvent_DataReceived(const FString& ReceivedData );
 
//====================================================
 
public:
	FSocket* ListenSocket;
 
	FUdpSocketReceiver* UDPReceiver = nullptr;
	void Recv(const FArrayReaderPtr& ArrayReaderPtr, const FIPv4Endpoint& EndPt);
 
	bool StartUDPReceiver(
		const FString& YourChosenSocketName,
		const FString& TheIP, 
		const int32 ThePort
	);

 
	//ScreenMsg
	FORCEINLINE void ScreenMsg(const FString& Msg)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, *Msg);
	}
	FORCEINLINE void ScreenMsg(const FString& Msg, const float Value)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("%s %f"), *Msg, Value));
	}
	FORCEINLINE void ScreenMsg(const FString& Msg, const FString& Msg2)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("%s %s"), *Msg, *Msg2));
	}
 
 
public:
 
	/** Called whenever this actor is being removed from a level */
	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

	/** Called whenever this actor is being added from a level */
	virtual void BeginPlay() override;

};

python code:

#-------------------------------------------------------------------------------
# Name:        module1
# Purpose:
#
# Author:      wlnd0
#
# Created:     13.11.2016
# Copyright:   (c) wlnd0 2016
# Licence:     <your licence>
#-------------------------------------------------------------------------------
from array import*
import socket
def Main():
        UDP_IP = '127.0.0.1'
        UDP_PORT = 8890

        #mySocket = socket.socket()
        mySocket = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
        #mySocket.connect((host,port))

        anim_type = 1
        anim_duration = 2
        next_anim_id = 3
        current_anim_id = 4
        #MESSAGE = "Fuuuuuck"
        #MESSAGE = 'FAnyCustomData %d, %d, %d, %d;' % (anim_type, anim_duration, next_anim_id, current_anim_id)
        MESSAGE = '%d,%d,%d,%d' % (anim_type, anim_duration, next_anim_id, current_anim_id)
        #  struct person pp = { "Krause", "Anton", 44 };

        #mySocket.sendto(MESSAGE.encode(), (UDP_IP, UDP_PORT))
        mySocket.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, UDP_PORT))


        #mySocket.send(message.encode())
        #data = mySocket.recv(1024).decode()
        #data, server = mySocket.recvfrom(4096)

        #print ('Received from server: ' + data)

        mySocket.close()

if __name__ == '__main__':
    Main()