适用于Windows的AF_UNIX等效程序
我想知道如何在Windows上使用类似Unix域套接字的东西 其行为是:一个进程将是一个“服务器”,接收来自其他进程的连接,它可以像TCP套接字那样保持和使用来自不同进程的连接 IP套接字不是一个解决方案,因为它需要选择一个端口,来自其他应用程序的进程可能需要选择的端口,并且在网络中可以看到打开的端口。适用于Windows的AF_UNIX等效程序,windows,winapi,sockets,ipc,porting,Windows,Winapi,Sockets,Ipc,Porting,我想知道如何在Windows上使用类似Unix域套接字的东西 其行为是:一个进程将是一个“服务器”,接收来自其他进程的连接,它可以像TCP套接字那样保持和使用来自不同进程的连接 IP套接字不是一个解决方案,因为它需要选择一个端口,来自其他应用程序的进程可能需要选择的端口,并且在网络中可以看到打开的端口。 我不知道命名管道是否可以接收和保留多个客户端,但我不知道如何区分不同的客户端。而且它不提供一种使用类似select的方法来等待来自多个连接的数据 一个老问题是关于使用命名管道的,但它没有解释如何
我不知道命名管道是否可以接收和保留多个客户端,但我不知道如何区分不同的客户端。而且它不提供一种使用类似select的方法来等待来自多个连接的数据 一个老问题是关于使用命名管道的,但它没有解释如何使用命名管道来获得所需的行为
我没有看到如何处理特定客户端。可能不是您想要听到的答案,但它是在Windows中实现进程间通信的几种标准机制之一。它有一些困扰开发人员的问题,但是对于您列出的所有需求,它都能很好地工作 至于IP套接字,您提到了“可以在网络中看到”的问题。如果您只是简单地将服务器套接字绑定到本地主机地址(127.0.0.1),则情况并非如此
我找到了答案 最大的区别在于等待连接的句柄与与与客户端通信的句柄相同。我必须为服务器创建一个新的命名管道,以等待下一个客户端 参考文献:
Windows最近(Windows 10 Insider build 17063)实现了对AF_UNIX的支持,因此您可以在将来的Windows版本中使用它 但是,并不是所有的功能都实现了,下面的功能不起作用
- AF_UNIX数据报(SOCK_DGRAM)或序列数据包(SOCK_SEQPACKET)套接字类型李>
- 辅助数据:Linux的unix套接字实现支持传递辅助数据,例如传递文件描述符(
)或 套接字上的凭据(“SCM\U凭据”)。没有支持 用于Windows unix套接字实现中的辅助数据李>SCM\u权限
- 自动绑定功能(有关详细信息,请参阅“sockaddr__n”一节)李>
- socketpair:Winsock 2.0不支持socketpair套接字API
来源:但是绑定到localhost并不是100%安全的,因为Javascript(它可以向localhost上的端口发送HTTP请求,即使它是从公共网站加载的)。近几年来,这让许多开发商感到痛苦,其中包括一些应该更了解安全的人。
SOCKET s;
const DWORD LOCAL_HOST_IP = 0x7f000001; // 127.0.0.1
sockaddr_in addrLocal = {};
s = socket(AF_INET, SOCK_STREAM, 0);
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(YOUR_APPLICATION_PORT);
addrLocal.sin_addr.s_addr = htonl(LOCAL_HOST_IP);
s = SOCKET(AF_INET, SOCK_STREAM, 0);
bind(s, (sockadr*)&addrLocal, sizeof(addrLocal));