如何将C++/CLI .Net套接字转换为boost::asio套接字?

3
我想要的很简单——创建一个新的boost asio socket从C++/CLI .Net socket代码样本。如何创建这样的东西?
以下是我想要做的伪代码:
.net::socket a;
boost::asio::socket b;
b.assign(a.nativeWin32Socket());

.NET有Boost版本吗?C++有.NET版本吗?否则,您可能需要进行Interop调用。C++代码是否在单独的DLL中?还是.NET代码? - RedX
3
也许你可以使用 System::Net::Sockets::Socket 类的 Handle 属性值。 - Simon
1
@RedX:C++有一个.NET版本,叫做C++/CLI,在问题中提到了。Kabumbus:直接打开boost.asio套接字不是更容易吗? - R. Martinho Fernandes
@ildjam这不就等于说没有STL或boost就不能使用C++吗? - RedX
@RedX:不,STL和Boost是库,因此是可选的;C++/CLI编译成MSIL,因此必须使用.Net CLR才能执行。 - ildjarn
显示剩余6条评论
2个回答

4
你试过吗?
b.assign(a.Handle.ToInt32());

请注意,您需要使用WSADuplicateSocket,因为b和a可能会关闭套接字并指向您不希望的位置。

因此,您需要类似于以下内容:

 SOCKET native = WSADuplicateSocket(a.Handle.ToInt32(),...);
 b.assign(native);

完整回答(已测试)
SOCKET native = a->Handle.ToInt32();
// Now native is a real socket
b.assign(boost::asio::ip::tcp::v4(), native);

现在,使用WSADuplicateSocket复制套接字是一个好主意:


也许您可以提供一些更完整、经过测试的相关主题代码答案,参考链接:https://dev59.com/rlvUa4cB1Zd3GeqPuH5F(Asio to .Net) - Rella

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接