이상적으로, 저는 서버에서 TCP와 UDP를 통합하고 개별 클라이언트 스레드에서이 두 가지 연결을 관리하는 방법을 찾고 있습니다. 현재, 나는 그것이 TCP 연결을 받아들이고 그것으로부터 UDP 통신을 설정할 수 있는지 궁금합니다. 여기 C#에서 TCP 및 UDP 통합하기
내 이상적인 설정입니다 :- 클라이언트 TCPClient.connect를 통해 서버에 TCP에 연결()
- 서버는 서버가 TCP 연결을 허용 할 때
- , 그것은 또한 얻을 수 TCPListener를 통해 TCP 연결을 허용 ,691 : 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);
내 혼란이 IPEndpoint의 유연성에 있다고 생각합니다. 나는 당신이 동일한 포트에서 TCP와 UDP를 설정할 수 있다는 것을 확신하며, 일관성을 위해서 같은 포트에두기를 원합니다. TCP 수신기는 스레드를 사용하고 있으며, 연결을 허용하고 해당 연결의 정보를 사용하여 UDP에서 다른 정보를 설정하고 싶습니다. (여기서는 "연결"이라는 단어를 매우 조심스럽게 사용합니다). –