【发布时间】:2009-09-28 01:02:31
【问题描述】:
是否可以在 Win32 上使用套接字并且 不 防火墙可能会阻止您正在使用的端口?
在 Unix 中,您可以使用 IF_UNIX 代替 IF_INET(即 命名管道 代替 套接字)。现在在 Windows 中你可以open a socket using different protocols:
socket(AF_INET, SOCK_RAW, IPPROTO_TCP); //open an IPv4 socket
socket(AF_BTH, SOCK_RAW, BTHPROTO_RFCOMM); //open a Bluetooth socket
socket(AF_NETBIOS, SOCK_RAW, IPPROTO_TCP); //open an IPX/SPX socket
socket(AF_INET6, SOCK_RAW, IPPROTO_TCP); //open an IPv6 socket
有没有办法打开命名管道套接字?例如。 (假设结构)
socket(AF_NAMEDPIPE, SOCK_RAW, IPPROTO_TCP); //open a named pipe socket
【问题讨论】:
-
在没有进入圣战的情况下,是什么驱使您得出结论,win32 上的命名管道如此不可靠?我一直在 Windows 上使用 WCF NetNamedPipeBinding,一点问题都没有。
-
@Matt 您是否一直在收集全球客户分布的统计数据?我已经看到失败率接近 1% 失败,但仅来自统计数据,在超过 10 台测试机器中无法重现......试图形成一个想法,如果系统中的代码质量很差,或者这些事情真的不可靠(我只是开了一个通过消除不必要的管道使用,将特定操作中的错误率降低 10 倍以上)。
-
@eglasius,没有。我不使用管道通过网络进行通信。我对 NetNamedPipeBinding 的使用与本地框隔离,并且工作可靠。我仍然使用传统的套接字来跨越机器边界。
-
抱歉,我措辞不好,我的意思是在许多 PC 上部署,而管道仅在这些 PC 中本地使用。所以同样的场景,本地使用/但不是受控环境,那里的用户拥有。
标签: sockets winapi named-pipes