Boost套接字/接收器无法在同一端口上侦听/连接
Boost Socket/Acceptor cannot listen/connect on same port?
我对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()
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- Qt 错误:信号 QDeclarativeEngine::quit() 发出,但没有连接接收器来处理它
- Qt:将广播的发送器连接到接收器
- 是否可以在没有接收器实例的情况下将信号连接到静态插槽
- Boost套接字/接收器无法在同一端口上侦听/连接
- GmfBridge 不将接收器筛选器与源筛选器连接
- Boost asio接收器在没有新连接的情况下解锁