Boost套接字/接收器无法在同一端口上侦听/连接

Boost Socket/Acceptor cannot listen/connect on same port?

本文关键字:连接 接收器 套接字 Boost      更新时间:2023-10-16

我对Boost有点陌生,但我正在尝试创建一个服务器,该服务器可以接受来自给定端口上客户端的连接。该服务器还应该能够写入同一端口上的客户端。

然而,当我尝试同时使用acceptor_.bind()/acceptor_.listen()socket_.connect(*iterator)实现时,async_accept()失败,并出现无效函数错误。

如果我只使用acceptor_.bind()acceptor_.listen(),我可以使用async_write()写入套接字(从服务器到客户端(。

如果我只使用socket_.connect()(但注释掉acceptor_.bind()acceptor_.listen()(,我就可以使用async_read_some()从套接字读取(从客户端发送到服务器的数据(。

我需要创建一个单独的套接字对象还是选择另一个端口?我已将启用重用地址设置为True。

为什么要将connect()连接到已连接到服务器的客户端?只需写入该连接所接受的现有套接字即可。

如果您必须connect()第二次连接到客户端(例如,就像FTP协议用于数据传输一样(,那么不要指定要将套接字绑定到的端口。让操作系统决定要使用的合适端口。

您似乎还没有掌握网络编程的一些基本概念,这与boost或Asio库无关。一般来说,服务器调用accept(),客户端调用connect()。asio示例详细说明了这一点,请参见

  • 异步tcp echo服务器
  • 阻止tcp echo客户端

请注意,服务器调用

  • async_accept()
  • async_read_some()
  • async_write()

而客户端调用

  • connect()
  • write()
  • read()