首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用原始套接字类型设置套接字

如何使用原始套接字类型设置套接字
EN

Stack Overflow用户
提问于 2016-03-07 15:09:57
回答 2查看 2.7K关注 0票数 0

我正在尝试使用ScketType.Raw设置一个套接字通信(对于我与之通信的设备来说,它是必要的,因为我发送自己的头和校验和)。我是新的套接字连接和非常新的原始套接字类型,并有困难设置它。

我的代码和IP地址/端口组合对于SocketType.Stream很好,但是使用SocketType.Raw失败了。使用SocketType.Raw设置套接字连接需要哪些其他信息?

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)上,通过原始套接字发送通信量的能力受到了几种限制:

  • 不能通过原始套接字发送TCP数据。
票数 3
EN

Stack Overflow用户

发布于 2016-03-07 15:20:44

我只是好奇,ProtocolType.IPv4有用吗?例如

代码语言:javascript
复制
MainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IPv4);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35847144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档