aar*_*rkk 12 c++ boost network-programming boost-thread boost-asio
首先,我希望我的问题有道理,甚至可能!从我读过的关于TCP套接字和Boost :: ASIO的内容来看,我认为应该如此.
我要做的是设置两台机器,并在它们之间通过TCP实现双向读/写链路.任何一方都应该能够发送一些数据供另一方使用.
关于TCP(/ IP?)的第一个令人困惑的部分是它需要这个客户端/服务器模型.然而,阅读表明任何一方都能够写作或阅读,所以我还没有完全气馁.我不介意建立任意一方作为客户端而另一方作为服务器.在我的申请中,这可以提前谈判,而不是我关心的问题.
不幸的是,我遇到的所有示例似乎都集中在连接到服务器的客户端上,并且服务器立即发回一些数据.但我希望客户端能够写入服务器.
我设想了一种我称之为的循环io_service.poll().如果轮询显示另一方正在等待发送一些数据,它将调用read()并接受该数据.如果队列中没有任何等待,并且它有要发送的数据,那么它将调用write().双方都这样做,他们应该能够互相读写.
我关心的是如何避免两者同时进入某些同步write()操作的情况.他们都有数据发送,然后坐在那里等待双方发送.这是否问题恰恰暗示我应该只做异步write()和read()?在这种情况下,如果连接的两端都试图同时异步写入,事情会爆发吗?
我希望有人可以理想地:
1)提供一种非常高级的结构或最佳实践方法,可以从客户端和服务器的角度完成此任务
或者,理想情况下,
2)说我想做的事情是不可能的,也许建议某种形式的解决方法.
我关心的是如何避免两者同时进入某些同步 write() 操作的情况。他们都有数据要发送,然后双方都坐在那里等待发送。这个问题是否意味着我应该只执行异步 write() 和 read() ?在这种情况下,如果连接的双方尝试同时异步写入,事情会崩溃吗?
听起来您对协议的使用方式有些困惑。TCP仅提供可靠的字节流,仅此而已。最重要的是,应用程序讲一个协议,以便它们知道何时以及读取和写入多少数据。如果客户端和服务器同时写入数据,如果双方都不读取数据,则可能会导致死锁。解决该行为的一种方法是,deadline_timer如果异步写入操作在一定时间内未完成,则使用 a 来取消异步写入操作。
编写服务器时应该使用异步方法。同步方法适用于一些简单的客户端应用程序。
| 归档时间: |
|
| 查看次数: |
2601 次 |
| 最近记录: |