【问题标题】:how to turn C++/CLI .Net socket into boost::asio socket?如何将 C++/CLI .Net 套接字转换为 boost::asio 套接字?
【发布时间】:2011-09-09 12:36:53
【问题描述】:

我想要的很简单 - 从 C++/CLI .Net 套接字创建新的 boost asio 套接字的代码示例。这样的东西怎么制作?

这是我想做的伪代码:

.net::socket a;
boost::asio::socket b;
b.assign(a.nativeWin32Socket());

【问题讨论】:

  • 你到底想要做什么?用 .NET 替换 boost::asio 套接字?
  • 否 - 我希望 havicg 在 .Net 端创建并接受连接,以将 .Net Socket 实例转换为 Boost::asio Socket。
  • “将 .NET Socket 转为 Boost::asio Socket”是什么意思?在代码级别移植?它们之间通过 TCP 建立连接?还是?
  • @Kabumbus:或许你可以使用 System::Net::Sockets::Socket 类的 Handle 属性的值。
  • @RedX:有一个用于 C++ 的 .NET 版本:它称为 C++/CLI,并在问题中提及。 Kabumbus:直接打开一个 boost.asio 套接字不是更容易吗?

标签: .net c++ sockets boost c++-cli


【解决方案1】:

你试过了吗?

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 复制套接字是个好主意:

【讨论】:

【解决方案2】:

您可以使用assign 将本机套接字分配给Boost asio 套接字。请参阅How to create a Boost.Asio socket from a native socket 接受的答案。

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2011-12-05
    • 2012-11-10
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多