Vb6 重用插座手柄

Vb6 重用插座手柄,vb6,winsock,Vb6,Winsock,我们有一个遗留的vb6自动化应用程序,可以根据需要通过套接字进行通信。 但是打开和建立到远程端口的连接(仅在需要时)需要更多的时间 因此,我计划编写另一个应用程序(比如套接字服务器),打开所需的套接字并保持连接的活动状态。该应用程序将把连接的套接字句柄值写入文件或数据库 在vb6中,是否可以使用套接字句柄从其他进程(本例中为套接字服务器应用程序)拥有的已打开的套接字创建套接字对象?否,Windows套接字不能跨进程共享,甚至不能通过句柄继承来共享(这是因为虽然它通常是一个句柄,但LSP可能会返回

我们有一个遗留的vb6自动化应用程序,可以根据需要通过套接字进行通信。 但是打开和建立到远程端口的连接(仅在需要时)需要更多的时间

因此,我计划编写另一个应用程序(比如套接字服务器),打开所需的套接字并保持连接的活动状态。该应用程序将把连接的套接字句柄值写入文件或数据库


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

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

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

这正是预期的情况类型


您的“服务器”可以创建一个套接字,并使用
WSADuplicateSocket()
来填充描述该套接字的记录。“服务器”然后可以使用您想要的任何IPC机制将
WSAPROTOCOL\u信息
公开给您的VB应用程序。VB应用程序可以传递
WSAPROTOCOL\u信息
以访问套接字并根据需要使用它。

这正是预期的情况类型


您的“服务器”可以创建一个套接字,并使用
WSADuplicateSocket()
来填充描述该套接字的记录。“服务器”然后可以使用您想要的任何IPC机制将
WSAPROTOCOL\u INFO
公开给您的VB应用程序。VB应用程序可以通过
WSAPROTOCOL\u INFO
访问套接字并根据需要使用它。

WSADuplicateSocket()
允许跨进程边界共享套接字。
WSADuplicateSocket()
允许跨进程边界共享套接字。答案很有趣!不幸的是,API有最低的操作系统要求,并且要求OP直接使用套接字API。鉴于语言是VB6,我怀疑他们正在使用COM组件访问TCP/IP套接字。尽管MSDN声称,
WSADuplicateSocket()
在XP上可用(
DuplicateHandle()
可以在Win2000和更早版本上使用)。VB6可以直接访问Winsock(请参阅)。哦,是的,我相信它可以。但我敢打赌,他们现在正在使用COM对象来完成此操作,转换的努力可能比OP所期望的要多。(感谢您在
WSADuplicateSocket
上提供更多信息,很高兴知道)@Remy Lebeau,谢谢你提供的信息性答案。我认为你的答案需要使用win32 API函数,我会尝试你建议的方法。实际上,现有的应用程序正在使用winsock控件。是否可以从套接字服务器提供的句柄创建winsock控件?@ramu:不,VB不支持,你必须使用acc直接使用Winsock API。答案很有趣!不幸的是,该API有最低的操作系统要求,并且要求OP直接使用套接字API。鉴于语言是VB6,我怀疑他们正在使用COM组件访问TCP/IP套接字。尽管MSDN声称,
WSADuplicateSocket()
在XP上可用(
DuplicateHandle()
可以在Win2000和更早版本上使用)。VB6可以直接访问Winsock(请参阅)。哦,是的,我相信它可以。但我敢打赌,他们现在正在使用COM对象来实现这一点,转换的努力可能比OP所期望的要多。(感谢您在
WSADuplicateSocket
上提供更多信息,很高兴知道)@Remy Lebeau,谢谢你提供的信息性答案。我认为你的答案需要使用win32 API函数,我会尝试你建议的方法。实际上,现有的应用程序正在使用winsock控件。是否可以从套接字服务器提供的句柄创建winsock控件?@ramu:不,VB不支持,你必须使用acc直接使用Winsock API。