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

请参阅MSDN 文章IOControl文档,专门针对 .ReceiveAll:

启用接收网络上的所有 IPv4 数据包。套接字必须有地址族InterNetwork,套接字类型必须是Raw,协议类型必须是IP。当前用户必须属于本地计算机上的 Administrators 组,并且套接字必须绑定到特定端口。Windows 2000 和更高版本的操作系统支持此控制代码。此值等于 Winsock 2 SIO_RCVALL 常量。Winsock 2 SIO_RCVALL 常量。

您是否可能不在管理员组中,或者您绑定到了错误的端口?似乎您正确设置了其他选项。虽然,说了这么多,你的代码看起来和这个例子一样,所以它应该可以工作吗?您能否进一步深入研究异常以阅读可能更详细的内部异常?

于 2010-10-25T10:42:08.713 回答