2

次のコードについて

        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
        s.Bind(new System.Net.IPEndPoint(IPAddress.Parse("127.0.0.1"),0));
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
        byte[] bin = new byte[4]{1, 0, 0, 0};
        byte[] bout = new byte[4];
        s.IOControl(IOControlCode.ReceiveAll, bin, bout);

次の例外が発生します。

Socket Exception: An invalid argument was supplied

次の行で

        s.IOControl(IOControlCode.ReceiveAll, in, out);

しかし、なぜ私が間違った議論をしたのか理解できません。

4

2 に答える 2

3

わかりました。見つけました。

127.0.0.1は、このための適切なIPアドレス注釈ではありません。ローカルのもの(192.168.0.100)を使用する必要があります。

くそー、それはいつもとても簡単です。

于 2010-10-25T13:11:17.787 に答える
1

特に.ReceiveAllについては、 MSDNの記事IOControlのドキュメントを参照してください。

ネットワーク上のすべてのIPv4パケットの受信を有効にします。ソケットにはアドレスファミリInterNetworkが必要であり、ソケットタイプはRawであり、プロトコルタイプはIPである必要があります。現在のユーザーはローカルコンピューターのAd​​ministratorsグループに属している必要があり、ソケットは特定のポートにバインドされている必要があります。この制御コードは、Windows2000以降のオペレーティングシステムでサポートされています。この値は、Winsock2SIO_RCVALL定数と同じです。Winsock2SIO_RCVALL定数。

管理者グループに属していないか、間違ったポートにバインドされている可能性がありますか?他のオプションを正しく設定したようです。とはいえ、コードはこの例と同じように見えるので、機能するはずですか?例外をさらに掘り下げて、おそらくより詳細な内部例外を読むことができますか?

于 2010-10-25T10:42:08.713 に答える