c++ - 端点、套接字、接受器之间的区别

标签 c++ sockets boost-asio

我正在尝试理解使用套接字进行网络编程的概念。

据我所知,电话交谈具有相似性,

  • 端点是电话号码,
  • 插入手机和
  • 接受者是接电话的人。

那么,

  • Socket绑定(bind)到端点(手机连接到插头)

  • 接受器可以访问套接字和处理程序 (一个人被放在电话旁边,并得到一个任务,如果有人打电话该怎么做)

如果这是一个有效的可视化,那么为什么您可以将接受器直接绑定(bind)到一个端点,然后再为接受器提供套接字?还是以上明显错误?

tcp::endpoint ep(boost::asio::ip::address::from_string("192.168.XXX.XXX"), portNumber);
tcp::acceptor a(io_service);
tcp::socket s(io_service);

a.open(ep.protocoll());
a.bind(endpoint);
a.listen(boost::asio::socket_base::max_connections);
a.async_accept(s, myHandler);

最佳答案

你的等效性不够准确。将接受器视为一种被动套接字:它只是等待其他端点的套接字请求连接,它是只读的。当接受器“读取”请求时(即当相应的 I/O 事件触发时),它将分支出一个连接到远程端点的新套接字,并将所有进一步的 I/O 工作委托(delegate)给它。然而,受体本身仍处于被动模式。

关于c++ - 端点、套接字、接受器之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458487/

相关文章:

MATLAB 中的 C++ MEX 编译

c++ - 如何在 Vulkan 中子分配缓冲区

C++ Boost 序列化 序列化模板派生类

C# TCP 服务器不可靠,丢弃过时的缓冲消息

c++ - 将 ZMQ 上下文传递给线程

c++ - 为什么在 C++ 类中的成员变量上使用前缀

c - 套接字,accept() 函数,无效参数

c++ - 是否应该捕获 boost::asio::io_service::run() 抛出的异常?

c++ - 优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

c++ - io_service,为什么以及如何使用它?