我正在尝试使用ScketType.Raw设置一个套接字通信(对于我与之通信的设备来说,它是必要的,因为我发送自己的头和校验和)。我是新的套接字连接和非常新的原始套接字类型,并有困难设置它。
我的代码和IP地址/端口组合对于SocketType.Stream很好,但是使用SocketType.Raw失败了。使用SocketType.Raw设置套接字连接需要哪些其他信息?
string txtPort = tbPort.Text;
string txtIP = tbIPAddress.Text;
int port = System.Convert.ToInt16(txtPort);
ip = IPAddress.Parse(txtIP);
ipEnd = new IPEndPoint(ip, port);
// this works but doesn't suit my needs
//MainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//MainSocket.Connect(ipEnd);
// This fails: An invalid argument was supplied (ip address and port of the device I am connecting to)
MainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Tcp);
MainSocket.Connect(ipEnd);发布于 2016-03-07 15:46:58
您正在尝试创建一个使用TCP协议号的原始套接字;也就是说,您正在尝试提供您自己的TCP实现。
不能创建使用TCP协议的原始套接字;管理和正确实现TCP协议需要操作系统的整体支持,在TCP的实现中将无法提供这种支持。
您仍然可以为UDP或IP本身创建原始套接字;在IP本身的情况下,您不能从原始套接字中传输协议号设置为TCP的数据包。
来自MSDN
原始套接字的限制 在Windows 7、Windows、Windows与Service 2 (SP2)和Windows与Service 3 (SP3)上,通过原始套接字发送通信量的能力受到了几种限制:
发布于 2016-03-07 15:20:44
我只是好奇,ProtocolType.IPv4有用吗?例如
MainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IPv4);https://stackoverflow.com/questions/35847144
复制相似问题