在以下代码
上 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);
但我不明白为什么我提供了错误的论据。
答案 0 :(得分:2)
好的,我找到了。
127.0.0.1不是适当的IP地址注释。我必须使用我当地的(192.168.0.100);
Darn,它总是那么容易。
答案 1 :(得分:1)
请参阅MSDN article和IOControl文档,特别是.ReceiveAll:
启用接收所有IPv4数据包 网络。套接字必须有 地址系列InterNetwork, socket类型必须是Raw,而且 协议类型必须是IP。目前 用户必须属于管理员 本地计算机上的组,以及 socket必须绑定到特定的 港口。支持此控制代码 在Windows 2000及更高版本上运行 系统。这个值等于 Winsock 2 SIO_RCVALL constant.Winsock 2 SIO_RCVALL常量。
您是否可能不在管理员组中,或者您绑定了错误的端口?您似乎正确设置了其他选项。虽然,尽管如此,您的代码看起来与this example相同,所以它应该有效吗?您是否可以深入研究异常以阅读可能更详细的内部异常?