2012-09-25 4 views
6

나는이 질문을 여러 번 알고 있습니다. 나는 모든 대답을 읽고 내가 찾을 수있는 EVRY 코드를 시도했다. 며칠 후 나는 필사적으로 도움을 청해야합니다.C에서 UDP 브로드 캐스트 메시지 수신

가정용 네트워크에 장치와 PC가 있습니다. 장치는 UDP 브로드 캐스트 메시지를 보냅니다. 내 PC에 나는 와이어 샤크에서 해당 메시지를 볼 수 있습니다

소스 대상 길이

192.168.1.102 0.0.0.0 UDP (60) 소스 포트 : 9050 대상 포트 : 패킷이에 도착하는 것을 의미 0

내 PC. 다음 단계는 해당 패킷을받는 C# 응용 프로그램을 만드는 것입니다. 위에서 언급했듯이 가능한 모든 해결책을 시도했지만 아무 것도받지 못합니다.

그래서 내가 잘못하고있는 뭔가가 있어야한다고 생각합니다. 누구든지 나를 도울 수 있습니까? 감사!

+1

패킷을 수신하는 데 사용하는 코드를 게시 할 수 있습니까? – tomasmcguinness

+0

나는 코드를 시도했다 : http://codeidol.com/csharp/csharp-network/IP-Multicasting/What-Is-Broadcasting/ 그리고 http://www.java2s.com/Code/CSharp/Network/ReceiveBroadcast. htm 및 또한 http://stackoverflow.com/questions/746519/udpclient-receive-on-broadcast-address – Boris

+0

활성 방화벽? Wireshark가 패키지를 가로채는 곳이 어디인지는 모르겠지만 나중에 방화벽이 멈추는 것일 수도 있습니다. – Default

답변

0

당신은 문제가되는 코드에 유선이 있습니다. (필자는 붙여 넣기 한 글을 읽지 않았습니다.)

항상 로컬 컴퓨터에서 작동하지만 원격 컴퓨터에서는 어떤 이유로 실패합니다.

이 문제를 해결하려면 Broadcst.cs에서 두 번 브로드 캐스트합니다. 한 번 로컬 호스트에 대한 다음 대상 IP 주소 (iep2).

sock.SendTo(data, iep1); 

을 제거하면 올바르게 작동합니다.

이유가 없습니다.

1

그냥 똑같은 문제를 경험하고 저를 위해 고쳐진 것을 공유하고 싶었습니다.

간략하게 : Windows 방화벽이 어떻게 든이 이상한 동작의 원인이었고 서비스를 비활성화하면 도움이되지 않는 것 같습니다. Windows 방화벽 인바운드 규칙 목록에서 특정 프로그램 (실행 파일)에 대해 들어오는 UDP 패킷을 명시 적으로 허용해야합니다.

자세한 내용은 계속 읽으십시오.

내 네트워크 설정 : 내 (수신) 기계의 IP는 192.168.1.2이고 송신 기계의 IP는 192.168.1.50이었으며 두 기계의 서브넷 마스크는 255.255.255.0이었습니다. 내 컴퓨터에서 Windows 7 x64를 실행 중입니다. 나는 그것에 ReceiveFrom를 호출하기 전에 내가 그 소켓에서 브로드 캐스트 패킷을 전송하지 않는 한

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0); 
sock.Bind(iep); 
sock.EnableBroadcast = true; 
EndPoint ep = (EndPoint)iep; 
byte[] buffer = new byte[1000]; 
sock.ReceiveFrom(buffer, ref ep); 

이 처음이 작동하지 않았다

내가 사용되는 코드 (약)입니다. 나는. ReceiveFrom 호출하기 전에이 줄을 추가 :

sock.SendTo(someData, new IPEndPoint(IPAddress.Broadcast, somePort)) 

내가 소켓을받는 첫 방송 패킷을 전송하지 않은 경우, 수신 브로드 캐스트 패킷은 (패킷의 목적지가 255.255이었다 와이어 샤크 등장에도 불구하고, 그것에 의해 접수되지 않았다. 255.255).

방화벽이 들어오는 패킷을 망쳐 놓은 것처럼 보입니다. (어떤 종류의 UDP 구멍이 나가는 패킷에 의해 먼저 열리지 않는 한 - 나는 UDP 구멍 펀칭이 어떻게 든 방송 패킷에 적용됩니다.) 나는 서비스에 갔고 Windows 방화벽 서비스를 모두 비활성화했습니다. 이것은 아무것도 바뀌지 않았습니다.

그러나 다른 모든 것을 시도한 후에 방화벽 서비스를 다시 활성화하고 프로그램을 다시 실행하려고했습니다. 이번에는 방화벽을 통해 MyProgram.vshost.exe 프로세스 (Visual Studio에서 디버깅 중이 었음)를 허용할지 묻는 방화벽 프롬프트가 나타났습니다. 들어오는 패킷을 받았습니다!

관련 문제