4

是否可以在 Win32 上使用套接字并且没有防火墙可能阻止您正在使用的端口?

在 Unix 中,您可以使用IF_UNIX代替IF_INET(即命名管道代替套接字)。现在在 Windows 中,您可以使用不同的协议打开套接字

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
4

3 回答 3

5

正如 John Cavan(我想我曾经和他一起上过学)所说,使用环回地址应该完全避免 NIC 和防火墙,并且还可以让您更改为完整的客户端-服务器模型(即单独的机器,可能在不同的平台)稍后只需最少的代码更改。

我还成功地将共享内存用于同机通信。这通常比 TCP/IP 和命名管道更快。但是,我发现 Win32 上的命名管道可靠且相对较快。

于 2009-09-28T01:33:46.490 回答
3

我还没有尝试过,但我建议如果你绑定到环回地址,那么你应该远离防火墙。如果您正在寻找命名管道的替代方案,您可能无论如何都想这样做,因为它应该比通过 NIC 实际通信更快。

您是否查看过其他替代方案,例如共享内存?尽管如此,切换到套接字的好处是,您可以稍后将这两个进程放在不同的机器上,并且仍然可以在不更改代码的情况下进行通信(假设您避免了对 IP 地址进行硬编码的错误)。

于 2009-09-28T01:21:27.570 回答
-1

有一个地址,类似于我用 Java 提出的 192168 dot var,在私有使用范围内使用随机选择的端口,赢了让它运行,没有任何抱怨。

于 2009-09-28T02:03:06.160 回答