TCP is great and all, except writing the client/server to handle a lot of excepts that could arise from network communication.
For anyone else who don't want to write a server, you could just use a restful server with some queues and a kv store... These servers tends to be much more forgiving.
This is much easier than maintaining a connection, as you don't need to maintain a connection.
However, there could be some lag, so I wouldn't recommend using this in your robot's main loop, although if you're doing onboard computer, it shouldn't be that bad, as long as your cables are all set. (a 1 second time out is recommended)
Here's the server code that i whipped up in under 40 min. Other code running on your onboard computer/your DS could be just communicating with the server and the server acts as a message passer:
https://github.com/FRCTeam4069/Mediator