Been using TCP and not replication since 4.13. But using a custom TCP implementation and nothing of Epic’s.
One issue you might be running into is where you read the TCP messages. You can only update Unreal objects during the game Tick(). Thus our implementation reads the incoming TCP queue during GameMode.Tick().