We use protobuf messages over HTTP. The HTTP client is built in to unreal, and libprotobuf can be added (fairly easily) as a third-party library. Downside of HTTP is you have to poll to get messages from the non-ue program (which is running the server) to ue, but with NAT and firewalls this is an existing problem anyway.