2009-01-12 4 views
7

브로드 캐스트 메시지를 보내고 응답 패킷을 수신하는 응용 프로그램이 있습니다. 아래는 코드 스 니펫입니다.모든 네트워크 어댑터에서 브로드 캐스트 메시지 보내기

m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); 

m_socket.Bind(new IPEndPoint(IPAddress.Any, 2000)); 

m_socket.BeginSendTo(
        buffer, 
        0, 
        buffer.Length, 
        SocketFlags.None, 
        new IPEndPoint(IPAddress.Broadcast, 2000), 
        Callback), 
        null 
        ); 

브로드 캐스트 메시지가 전송되지 않았습니다. 내 컴퓨터에는 3 개의 네트워크 어댑터가 있습니다. 하나는 로컬 네트워크 어댑터이고 다른 두 가지는 VMWare 네트워크 가상 어댑터입니다. 내 응용 프로그램을 실행할 때 wireshark 네트워크 캡처를 사용하여 브로드 캐스트 메시지가 VMWare 네트워크 어댑터 중 하나에서 전송되고 있음을 알 수 있습니다.

브로드 캐스트 메시지가 PC의 모든 네트워크 어댑터에서 전송되도록 코드를 수정하고 싶습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

+0

문제를 해결할 수 있습니까? –

답변

11

다음을 사용하여 모든 IP 주소를 얻을 수 있습니다. 따라서리스트를 반복하고 멀티 캐스트를 보낼 때 원하는 특정 IP에 바인드 할 수 있습니다 (존 B가 말한 것처럼).

foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) 
    foreach (var ua in i.GetIPProperties().UnicastAddresses) 
     Console.WriteLine(ua.Address); 
+0

+1 사용 가능한 NIC 목록을 반복합니다. : D –

6

Bind()를 호출하면 로컬 IP 끝점을 설정합니다. IPAddress.Any를 사용하는 대신 보내려는 NIC의 IP 주소를 사용하십시오. 이 작업은 각 NIC마다 별도로 수행해야합니다.

-1

tcpListener를 구성 할 때 IPAddress.Any를 사용할 수 있습니다. 이것은 모든 인터페이스에 tcp 리스너를 연결합니다.

+1

나는 그것을 확인할 수 없다. –

+0

OP가 청취자가 아닌 방송을 요구하고 있습니다. – pmcb

1

이것을 확인하십시오. http://salaam.codeplex.com/ I와 저의 친구가 Salaam이라는 클래스 라이브러리를 개발했습니다. 소스 코드를 다운로드하거나 바이너리 (.dll)를 사용하여 소스 코드를 사용하십시오.

관련 문제