Так что в идеале я ищу способ объединить TCP и UDP на сервере и управлять обоими этими соединениями в рамках отдельных клиентских потоков.В настоящее время мне интересно, возможно ли принять TCP-соединение и настроить UDP-соединение от него.
Вот мой идеальный вариант:
- Клиент подключается по TCP к серверу черезTCPClient.connect ()
- Сервер принимает TCP-соединение через TCPListener
- , когда сервер принимает TCP-соединение, он также получает IPEndpoint из TCP-соединения
и использует этоначать UDP-коммуникацию с:
serverUDPSocket.BeginReceiveFrom (byteData, 0, 1024,
SocketFlags.None, ref (Endpoint)ThatIPEndpointThatIJustMentioned,
new AsyncCallback(client.receiveUDP),
(Endpoint)ThatIPEndpointThatIJustMentioned);
^, поэтому я столкнулся с небольшой теоретической проблемой.Насколько я понимаю, конечные точки для TCP и UDP будут отформатированы по-разному.Как я могу решить эту проблему?Я хотел бы избежать подключения клиента к UDP в отдельном потоке и последующего объединения этих потоков в одном управляющем классе.
РЕДАКТИРОВАТЬ:
Вот код, который я пытаюсь реализовать:
//Listening for TCP
TcpClient newclient = listenTCP.AcceptTcpClient(); //Accept the client
Client clientr = new Client(newclient); //Create a new Client class to manage the connection
clientr.actionThread = new Thread(clientr.action); //This thread manages the data flow from the client via the TCP stream
clientr.actionThread.Start(clientr);
EndPoint endPoint = newclient.Client.RemoteEndPoint; //so this is the sketchy part. I am trying to get the endpoint from the TCP connection to set up a UDP "connection". I am unsure about the compatibility as UDP and TCP sockets are different.
UDPSocket.BeginReceiveFrom(new byte[1024],0,1024, SocketFlags.None,ref endPoint, new AsyncCallback(clientr.receiveUDP), null); //the AsyncCallBack is like the manager thread for UDP (same as in TCP)
clients.Add(clientr);