2013-10-07 2 views
2

게임이 서버에 연결될 때 청취하고 있지만 포트 범위를 알고 있지만 불행히도 UDPClient의 수신 기능은 특정 포트에서만 수신 대기합니다. 조인하는 포트가 범위에서 무작위이므로 UDP 포트 범위에서 수신 대기를 처리하는 좋은 방법이 있습니까?UDP 포트 범위 듣기

"Dota 2는 UDP 프로토콜을 사용하며 포트 27015에서 28999까지의 전용 서버로 통신합니다. 기본적으로 클라이언트는 UDP 포트 27005 또는 컴퓨터를 열고 게임 서버. " - http://dev.dota2.com/showthread.php?t=15261

답변

2

소켓 API에서는 불가능합니다. 예를 들어 libpcap과 같이 더 깊은 레벨에서 TCP/IP 스택을 묶는 라이브러리를 사용하고자 할 것입니다.

당신이 C# .NET을 사용하기 때문에 사용자가 대상 UDP 포트와 일치하고 싶었다면, 당신은 당신이

udp[2:2] >= 9000 and udp[2:2] < 9100 
1

이의 필터를 사용할 수, pcap.NET, a .NET interface to WinPCap

에 가장 관심이있을 것입니다 때문에 안 다양한 범위의 포트 청취. 하나의 포트를 듣고 모든 IP 주소에서 포트를 받아들입니다. 다음을 사용하여이 작업을 수행 할 수 있습니다.

IPAddress.Any 

수신 대기 할 주소 인수로. 그런 다음 상대방 포트가 서버가 수신 대기중인 포트로 지정하십시오. 예 포트 11000에 모든 클라이언트로부터 데이터를 수신 할 수

는 :

게임이 포트 범위를 통해 연결되고, 내가 알고 싶은 경우 다음 방법이 될 것입니다 무슨 그래서
UdpClient udpClient = new UdpClient(11000); 
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0); 
byte[] receivedBytes = udpClient.Receive(ref RemoteIpEndPoint); 
+0

그것은 연결을 할 때 ? 내 게시물을 편집하여 게임 개발자가 말하는 것을 보여줄 것입니다. – justNeph

+0

I _guess_ 범위를 사용하여 특정 서버를 제한하는 범위를 사용하고 있습니다 (즉, 서로 다른 포트에서 다른 서버를 실행하고 있습니다).하지만 초기 연결은 하나의 포트로 이루어집니다. 그래서 내 대답은 남아 있습니다. – markmnl