Boost Socket / Acceptor无法在同一端口上侦听/连接?

时间:2011-10-27 19:09:54

标签: c++ sockets boost network-programming boost-asio

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

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

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

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

我是否需要创建单独的套接字对象或选择其他端口?我已将重用地址设置为True。

2 个答案:

答案 0 :(得分:2)

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

如果必须connect()与客户端建立第二个连接(例如,FTP协议用于数据传输),则不要指定将该套接字绑定到的端口。让操作系统决定使用合适的端口。

答案 1 :(得分:1)

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

请注意,服务器调用

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

而客户端调用

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