5

次の C# コードは、Vista では正しく動作しますが、XP では失敗します。

SocketException: 無効な引数が指定されました。

エラー コードは 10022 です。

XP のファイアウォールは無効になっています。

using System;
using System.Net;
using System.Net.Sockets;

public class SocketTest
{
    [STAThread]
    public static void Main()
    {
        MySocket s = new MySocket();

        Console.WriteLine("done");
        Console.ReadLine();
    }

    public class MySocket : Socket
    {
        public const ushort SocketTtl = 4;
        public const string Address = "239.255.255.250";

        public IPAddress IPAddress = IPAddress.Parse(Address);

        public MySocket()
            : base(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        {
            SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
            SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, SocketTtl);

            // This line throws SocketException: An invalid argument was supplied
            // SocketException.ErrorCode: 10022
            SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress));
        }
    }
}

何か案は?

4

1 に答える 1

8

SocketOptionName.AddMembership オプションを設定する前に、ソケットをインターフェイスにバインドする必要があります。

編集:MSDNドキュメントでこれを確認しました(ただし、NT4までしか記載されていません):

Windows 98、Windows NT 4.0 プラットフォーム 注: AddMembership を optionName パラメータとして使用する前に、Bind メソッドを呼び出す必要があります。

于 2009-01-12T20:48:16.633 に答える