2014-10-01 81 views
0

我们有一个传统的vb6自动化应用程序,可根据需要通过套接字进行通信。 但是,打开并建立连接(只有在需要时)到远程端口需要更多的时间。因此,我打算编写其他应用程序(比如套接字服务器)来打开所需的套接字并保持连接活动。此应用程序将连接的套接字句柄值写入文件或数据库。重复使用套接字句柄

是否有可能在vb6中使用由其他进程拥有的已打开的套接字(本例中的套接字服务器应用程序)使用套接字句柄创建套接字对象?

回答

2

这正是WSADuplicateSocket()适用的情况。

您的“服务器”可以创建套接字并使用WSADuplicateSocket()来填充描述套接字的WSAPROTOCOL_INFO记录。然后,“服务器”可以使用任何你想要的IPC机制将WSAPROTOCOL_INFO暴露给你的VB应用程序。 VB应用程序可以通过WSAPROTOCOL_INFOWSASocket()来访问套接字并根据需要使用它。

+0

有趣的答案!不幸的是,API的操作系统要求最低,并且要求OP直接使用套接字API。鉴于语言是VB6我怀疑他们正在使用COM组件来访问TCP/IP套接字。 – tcarvin 2014-10-02 12:40:58

+0

尽管MSDN声称,'WSADuplicateSocket()'在XP上可用(''DuplicateHandle()''可以在Win2000和更早版本上使用)。 VB6可以直接访问Winsock(请参阅http://www.thevbzone.com/modWINSOCK.bas)。 – 2014-10-02 15:37:31

+0

哦,是的,我确定它可以。但我仍然认为他们现在正在使用COM对象来执行它,并且转换的努力可能比OP讨论的要多。 (并感谢关于'WSADuplicateSocket'的更多信息,很好的了解)。 – tcarvin 2014-10-02 15:52:35

2

不,Windows套接字不能被跨进程共享,甚至不通过句柄继承(这是因为虽然它通常是一个句柄,但LSP可能会返回一些不是句柄,因此不会继承的东西)。您应该打开一个进程并保持连接,其他进程与该进程通信以与服务器进行通信。

+0

这个怎么样:http://support2.microsoft.com/kb/150523 – wqw 2014-10-01 15:41:12

+0

@wqw:看到这个问题:http://stackoverflow.com/q/11847793/2101267 – 2014-10-01 16:25:35

+0

'WSADuplicateSocket()'允许共享套接字跨越流程边界。 – 2014-10-02 01:17:18