2011-10-21 11 views
0

実際にはconsole.writelineで、別のipaddressから送信されるUDPserverからすべてのデータを取得しています。私のテキストファイルにデータを移す書き込みデータは、それがUDPデータを失うことなく別のIPアドレスからテキストファイルに送信するUDPデータを書き込む方法

bool done = false; 
private const int listenPort = 9050; 
string strDestinationfileName = AppDomain.CurrentDomain.BaseDirectory + "Sample.txt"; 
UdpClient listener = new UdpClient(listenPort); 
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); 
FileStream fout = new FileStream(strDestinationfileName, 
           FileMode.OpenOrCreate, 
           FileAccess.Write, FileShare.ReadWrite); 
try 
{ 
    while (!done) 
    { 
     Console.WriteLine("Waiting for broadcast"); 
     byte[] bytes = listener.Receive(ref groupEP); 
     fout.Write(bytes, 0, bytes.Length); 
     System.Threading.Thread.Sleep(100); 

     Console.WriteLine("Received broadcast from {0} :\n {1}\n", 
      groupEP.ToString(), 
      Encoding.ASCII.GetString(bytes, 0, bytes.Length)); 
    } 
} 
+0

なぜデータが欠落していると思われますか?受信したデータと書き込まれたデータの例を追加してください。 – PVitt

+0

受信バイトのすべてがascii(あなたのtxtファイルの見えない文字)ではないかもしれませんか? – Djole

+0

@PVitt - それはUDP、信頼性の低いプロトコルです。いくつかのケースでは、すべてのパケットが –

答えて

0

を失わずに、私のテキストファイルにそのデータを書き込むためにどのように書き込まない欠けているサムスながらパケットベースの、信頼性の低いプロトコルです。それはあなたがしたいことに対して可能な最悪の選択です。

UDPパケットが到着する可能性がありますが、到着していないか、または到着順序が間違っている可能性もあります。大きすぎると静かに落とされることもあります。

TCPを使用します。ストリームベースのプロトコルで、バイトが送信された順序で到着し、確実に到着します。これには、.NETの組み込みのSocketまたはTCPクラスを使用できます。

(UDPを使用する必要がある場合は、独自のパケットエンコーディングスキームを作成して、パケットが到着して正しい順序で到着するようにプロトコルを再試行する必要があります。 。ただ、TCPを使用するTCPがあなたのために何をするか、基本的には)

編集:!、あなたはtruedoneを設定することはありませんので、あなたのループが終了したことがない、と最終:どうやら指摘以来xixoniaのために、重要な欠陥は価値がありませんデータの一部がディスクにフラッシュされることはありません。

+1

OPは彼がコンソールに書き込むときに必要なすべてのデータを受け取っていたが、そのファイルには同じデータが含まれていないと述べた。この問題は、データグラムの信頼性とは関係ありません。おそらく、データグラムは1つのエンコーディングで受信されていますが、別のエンコーディングでファイルに書き込まれるため、データが失われる可能性があります。 –

+0

xixonia - ASCIIエンコーディングは1バイトあたり1文字なので、データは消えません。最悪の場合、余分な文字や不正な文字が表示されます。ランダムなバイナリデータを受け取ったとしても、1バイトあたり1文字が得られます。しかし、あなたが自信を持っているなら、自由に回答を投稿してください。 –

+0

@xixonia私は同じデータを受け取っていますが、テキストファイルに書き込むときに、相手側から送信された行がありませんでしたが、行メッセージがコンソールに表示されます – user1005078

関連する問題