0

こんにちは私はマルチキャストアドレスでデータを受信するためにここからこのコードを取得しました

 Socket sock = new Socket(AddressFamily.InterNetwork,
            SocketType.Dgram, ProtocolType.Udp);
 Console.WriteLine("Ready to receive…");
 IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
 EndPoint ep = (EndPoint)iep;
 sock.Bind(iep);
 sock.SetSocketOption(SocketOptionLevel.IP, 
            SocketOptionName.AddMembership, 
            new MulticastOption(IPAddress.Parse("224.100.0.1")));
 byte[] data = new byte[1024];
 int recv = sock.ReceiveFrom(data, ref ep);
 string stringData = Encoding.ASCII.GetString(data, 0, recv);
 Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
 sock.Close();

これで、パケットを受信するとこれが機能し、sock.ReceiveFromがトリガーされますが、その後、レシーバーがシャットダウンします(sock.Close行を削除しても)。
私が欲しいのは、受信機が私にデータを表示または保存しますが、さらに多くのパケットをリッスンし続けることです。

これを行うための良い方法は何でしょうか?

4

1 に答える 1

1

ある種のループをコーディングするか、非同期メソッド BeginReceive/EndReceive を使用する必要があります。ローカル sock 変数がスコープ外になるとすぐに、gc によって収集され、破棄される可能性があります。

byte[] data = new byte[1024];

while (true) {
    // this blocks until some bytes are received
    int recv = sock.ReceiveFrom(data, ref ep);
    string stringData = Encoding.ASCII.GetString(data, 0, recv);
    Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
}
于 2012-11-01T11:50:08.160 に答える