2012-03-06 16 views
1

C#を使用すると、UDP経由でのブロードキャストは繰り返しパケットを送信しますか?UDPを使ったブロードキャストは、繰り返しパケットを送信しますか?

私はこれまでこの技術を使用したことがなく、LAN経由で小さなビットの情報(小さな1行の文字列)を一時的にブロードキャストしたいと考えています。受信側が準備ができていない場合は、ブロードキャスト自体が繰り返されるのでしょうか、それとも1回限りでしたか?私が使用しているコードはhereです。だから私は放送局の1台のマシンを始動させ、数分後に受信機を始動させ、放送局から送られたものを取り出す。

はここで一度だけパケットを送信することにより、設計コード

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 –

関連する問題