2012-03-06 2 views
1

C#을 사용하면 UDP를 통한 브로드 캐스트가 반복적으로 패킷을 보내거나 한 번만 수행합니까?UDP를 통한 방송이 반복적으로 패킷을 보내거나 한 번만 전송합니까?

이전에는이 ​​기술을 사용 해본 적이 없어서 LAN을 통해 작은 정보 (작은 한 줄 문자열)를 일시적으로 브로드 캐스팅하려고합니다. 수신단이 준비가되지 않았다면 방송 자체가 반복 될 것인가 아니면 한 번 일까? 내가 사용하는 코드는 here입니다. 그래서 나는 방송사 하나의 기계를 시작하고 몇 분 후에 수신기를 시작하고 방송사가 보낸 것을 검색합니다.

여기 번만 패킷을 전송하여 설계 코드

using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
class Broadcst 
{ 
    public static void Main() 
    { 
    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 
       ProtocolType.Udp); 
    IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050); 
    IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050); 
    string hostname = Dns.GetHostName(); 
    byte[] data = Encoding.ASCII.GetBytes(hostname); 
    sock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast, 1); 
    sock.SendTo(data, iep1); 
    sock.SendTo(data, iep2); 
    sock.Close(); 
    } 
} 
+4

모든 브로드 캐스트 패킷이 무한정 자동으로 반복되는 경우 네트워크에 어떤 현상이 일어날 지 상상해보십시오. –

+0

아, 네가 알아. – JimDel

답변

4

UDP이다. 핸드 셰이크 (TCP와 달리), 오류 수정 또는 전송 보장에 대한 개념이 없습니다. 체크섬 등을 수동으로 요청하지 않으면 데이터를 보내는 위치에 데이터가 도착하는지조차 확인할 수 없습니다.

위키피디아의 멋진 섹션은 Reliability and congestion control solutions in UDP입니다.

신뢰성을 원하면 전송 보증 코드를 구현해야합니다. 그러나 수신자가 데이터 수신 사실을 알리는 메시지가 지연되면 어떻게 될까요? 그럼, 당신은 어떤 종류의 타임 아웃을 구현해야합니다. 메시지가 손실되면 어떻게됩니까? 데이터를받는 사람에게 다시 보내야합니다. 수신자에게 수신 여부를 어떻게 알 수 있습니까 시간? 기타 ...

이 작업을 원하지 않으면 TCP를 조사하여 자동으로이 작업을 관리하는 것이 좋습니다.

+2

UDP 패킷의 복제본을 수신하는 것이 가능합니다. 루프 및 물리 계층 재전송은 일반적인 원인입니다. 그러나 이것들은 네트워크의 실패를 나타내므로 계산해서는 안됩니다. –

+0

흥미 롭습니다. TCP에는 중복 패킷을 처리하기위한 메커니즘이 내장되어 있습니까? 나는 그렇게 생각할 것이다. 그러나 나는 확실하지 않다. –

+0

신경 쓰지 마세요. 대답은 놀랍지 않게 예스입니다. http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Reliable_transmission –