C# 在C语言中统一TCP和UDP

C# 在C语言中统一TCP和UDP,c#,multithreading,networking,tcp,udp,C#,Multithreading,Networking,Tcp,Udp,因此,理想情况下,我正在寻找一种在服务器上统一TCP和UDP的方法,并在单个客户端线程下管理这两个连接。目前,我想知道是否有可能接受TCP连接并从中设置UDP通信 以下是我的理想设置: 客户端通过TCPClient.connect在TCP上连接到服务器 服务器通过TCPListener接受TCP连接 当服务器接受TCP连接时,它还从TCP连接获取IPEndpoint 并使用它开始UDP通信: serverUDPSocket.BeginReceiveFrom (byteData, 0, 1024,

因此,理想情况下,我正在寻找一种在服务器上统一TCP和UDP的方法,并在单个客户端线程下管理这两个连接。目前,我想知道是否有可能接受TCP连接并从中设置UDP通信

以下是我的理想设置:

客户端通过TCPClient.connect在TCP上连接到服务器 服务器通过TCPListener接受TCP连接 当服务器接受TCP连接时,它还从TCP连接获取IPEndpoint 并使用它开始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);

在一个应用程序中创建两个侦听器没有问题,即使它们使用不同的协议。我想你不是在问你是否可以在同一个端口上做这件事,反正做这件事没有意义

然而,监听器正在使用线程,所以若同时在应用程序中有gui或某些进程(例如计算),它需要不同的线程


若要在一个线程中完成所有操作,必须首先从第一个侦听器接收消息,然后设置第二个侦听器。不可能同时在一个线程中设置两个侦听器,因为如果您设置第一个侦听器,它将协调整个线程等待消息。

这是因为我在代码级别上对UDP缺乏理解


我最后设置了我描述的另一种方法,它将单独接受初始UDP数据包,然后通过比较IP地址将通信端点+消息指向管理客户端类。

我认为我的困惑在于IPEndpoint的灵活性。我非常确定您可以在同一端口上设置TCP和UDP,为了一致性,我希望将它们保持在同一端口上。TCP侦听器正在使用一个线程,我希望它接受一个连接,并使用该连接中的信息在UDP上设置另一个线程,我在这里非常谨慎地使用connection这个词。