Although I did not run a WireShark trace, after a review of the config file I can deduce that TTS most likely uses JSON to send/receive corresponding ride to the server which then posts the race in the list of the other TTS clients which in turn download them when connecting to a multiplayer ride. Also, judging from the host server Multiplayer log file excerpt below, while some things are pretty clear on what the Tacx server does, but any progress on a home-grown solution is dependent on the corresponding log file from a client that was going to join the LAN race.
[INFO 2020/01/21 18:12:34:3660] LOGSERVICE: Now logging to C:\ProgramData\Tacx\TrainerSoftware\TTS4\Logs\RaceServer__2020_01_21_18_12_34_36.log
[INFO 2020/01/21 18:12:34:5011] SERVER: Opening the race server (5002)
[INFO 2020/01/21 18:12:34:5450] RACESERVICE: The LAN/Internet listing service has been opened.
[INFO 2020/01/21 18:12:34:5470] RACESERVICE: Unable to open the hub service: Running in local server mode.
[INFO 2020/01/21 18:12:34:5760] SERVER: Up & running.
[INFO 2020/01/21 18:12:34:6380] WAITINGFORHOSTSTATE: Waiting for host. Time left: 10
[INFO 2020/01/21 18:12:34:9196] APPLICATIONSERVICE: [192.168.1.86:3464] Client connected.
[INFO 2020/01/21 18:12:35:0225] CONSUMER: [192.168.1.86:3464] Host registered.
[INFO 2020/01/21 18:12:35:0245] WAITINGFORHOSTSTATE: [192.168.1.86:3464] Registered as host.
[INFO 2020/01/21 18:12:35:0395] WAITINGFORHOSTSTATE: Lobby creation pending. Time left: 10
[INFO 2020/01/21 18:12:35:1726] CONSUMER: [192.168.1.86:3464] Client synchronized. (Client lag: 22.50ms | Server lag: 107.83ms)
[INFO 2020/01/21 18:12:35:3166] INLOBBYSTATE: Lobby is now up and running.
[INFO 2020/01/21 18:12:35:3166] INLOBBYSTATE: Hosting training 'Carravaggio Tour' with a total length of 17011.090 meters. ID: 6A1CE5E9EC010DE36E8FBEBA5B63B778F3B6BC20.
[INFO 2020/01/21 18:12:35:3295] INLOBBYSTATE: No players connected.
[INFO 2020/01/21 18:12:35:4205] RACESERVICE: [192.168.1.86:3464] Player 'M' has joined the lobby [Interface Serial: 320802500, Brake Serial: 19796, Brake Type: FitnessTrainer, IsRegistered: True, IsProfilePublic: False, UserId: N/A, Bike: RoadBike] [TTS: 4.23.1.0]
[INFO 2020/01/21 18:12:35:6645] HUBSERVICE: [192.168.1.8654163] Udp channel established for player #2 (M)
[INFO 2020/01/21 18:12:36:3516] INLOBBYSTATE: One or more player(s) connected.
[WARN 2020/01/21 18:12:36:7356] UDPSERVICE: (Message) Malformed packet; stated payload length 1514, remaining bytes 262
[WARN 2020/01/21 18:12:36:8436] UDPSERVICE: (Message) Malformed packet; stated payload length 1514, remaining bytes 262
[WARN 2020/01/21 18:12:36:9546] UDPSERVICE: (Message) Malformed packet; stated payload length 1514, remaining bytes 262
[WARN 2020/01/21 18:12:37:0666] UDPSERVICE: (Message) Malformed packet; stated payload length 1514, remaining bytes 262
[WARN 2020/01/21 18:12:37:1756] UDPSERVICE: (Message) Malformed packet; stated payload length 1514, remaining bytes 262
[ERROR 2020/01/21 18:12:56:3708] LISTINGSERVICE: An error occured while publishing the server to the MasterServer: Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0012923. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Exception (System.ServiceModel.EndpointNotFoundException): Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0012923. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Server stack trace:
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Cloud.Core.API.Contracts.Master.IMasterRaceAPI.RegisterRace(ServerInfoProto serverInfo)
at Cloud.Core.WCF.Aspects.AutoServiceAttribute.OnEntry(MethodExecutionArgs args)
at Cloud.Core.API.Clients.Master.MasterRaceClient.RegisterRace(ServerInfoProto serverInfo)
at RaceServer.Services.ListingService.<UpdateMasterListing>()
Exception (System.Net.Sockets.SocketException): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
[ERROR 2020/01/21 18:13:25:5762] LISTINGSERVICE: An error occured while publishing the server to the MasterServer: Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0034577. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Exception (System.ServiceModel.EndpointNotFoundException): Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0034577. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Server stack trace:
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Cloud.Core.API.Contracts.Master.IMasterRaceAPI.RegisterRace(ServerInfoProto serverInfo)
at Cloud.Core.WCF.Aspects.AutoServiceAttribute.OnEntry(MethodExecutionArgs args)
at Cloud.Core.API.Clients.Master.MasterRaceClient.RegisterRace(ServerInfoProto serverInfo)
at RaceServer.Services.ListingService.<UpdateMasterListing>()
Exception (System.Net.Sockets.SocketException): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
[ERROR 2020/01/21 18:13:55:5735] LISTINGSERVICE: An error occured while publishing the server to the MasterServer: Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0021991. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Exception (System.ServiceModel.EndpointNotFoundException): Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0021991. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Server stack trace:
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Cloud.Core.API.Contracts.Master.IMasterRaceAPI.RegisterRace(ServerInfoProto serverInfo)
at Cloud.Core.WCF.Aspects.AutoServiceAttribute.OnEntry(MethodExecutionArgs args)
at Cloud.Core.API.Clients.Master.MasterRaceClient.RegisterRace(ServerInfoProto serverInfo)
at RaceServer.Services.ListingService.<UpdateMasterListing>()
Exception (System.Net.Sockets.SocketException): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
[ERROR 2020/01/21 18:14:25:5902] LISTINGSERVICE: An error occured while publishing the server to the MasterServer: Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0037188. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Exception (System.ServiceModel.EndpointNotFoundException): Could not connect to net.tcp://cloud.tacxvr.com:29001/Race/. The connection attempt lasted for a time span of 00:00:21.0037188. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001.
Server stack trace:
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Cloud.Core.API.Contracts.Master.IMasterRaceAPI.RegisterRace(ServerInfoProto serverInfo)
at Cloud.Core.WCF.Aspects.AutoServiceAttribute.OnEntry(MethodExecutionArgs args)
at Cloud.Core.API.Clients.Master.MasterRaceClient.RegisterRace(ServerInfoProto serverInfo)
at RaceServer.Services.ListingService.<UpdateMasterListing>()
Exception (System.Net.Sockets.SocketException): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.182.195.88:29001
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)