DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でUDP経由でデータを受信する方法

環境/言語:[C#2005]
分類:[.NET]

はじめましてC#初心者のマルコと申します。

現在UDP経由でデータを送信・受信するプログラムをC#2005で作成しております。
UDP経由で0x61を送信すると、クライアントから8ビットの値(0x00〜0xFF)が返るので、それをMessageBoxにて表示したいと思っています。

UdpClientクラスを使って送信は問題なくできました。ボタンのクリックイベントにコードを記述して下記のコードでSendData配列の内容を送信しました。

udpClient.Send(SendData, SendData.Length);

ところが、下記のコードで受信を待機すると、うまく受信できていないのかソフトウエアが停止してしまいます。

IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);

MessageBox.Show(returnData.ToString());

VB6の時は、UDP経由でデータを受信すると、WinsockコントロールのDataArrivalイベントが発生して、その中で処理を記述しましたが、C#の場合どのようにしたらよいのでしょうか。

質問させていただきたい点は下記のことです。

1、"private void button2_Click"でUDP経由でデータを送信して、それに対してクライアントからデータが返ってくる場合、udpClient.Receiveは、同じ"private void button2_Click"の中に書いていいのでしょうか。

2、ホスト側のイベントにかかわらず突然クライアントから送られてくるデータを受信するためには、どのようにしたらよいのでしょうか。

以上、お教えいただければ幸いです。
よろしくお願いいたします。



特にボタンクリックイベントなど使用せずに、いつクライアント側から
UDPの受信はマルチスレッドで,受信をポーリングします。
ポーリングを終了するときには,Udp.Close()することにより,例外で受信スレッドを終了させます。

マルチキャストの例ですが,UDPを使ったサンプルプログラムを作成したので参考にしてください。(ただし,エラー処理などはかなり適当です。)

http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/08/udp_80bb.html

DOBON.NET | プログラミング道 | プログラミング掲示板