TCP客户端大多都是异步操作,发送数据后只能在回调里处理,而有一些特殊业务可能需要发送后同步返回。
部分模块或支持库也有同步返回,但只支持单线程单包返回,经常看到有人在问这方面的问题
所以吃完粽子后趁消化之余闲着没事就顺手写了个 多线程TCP发送数据同步接收
实现思路:
1:发送数据前取一个唯一标识,和创建一个事件,保存该事件ID和唯一标识放到数组里
2:把唯一标识写入到数据里一并发送到服务器,然后调用事件等待
3:服务器接收到数据后处理完相关命令ID,在发回给客户端的数据里带上客户端发来的唯一标识
4:客户端收到数据时取出 唯一标识,再到数组里通过唯一标识取出 事件ID,再把数据放到数组里,触发事件ID,另外线程那边发送的就能收到通知了。
5:在发送线程收到事件触发后,根据唯一标识在数组里取出服务器返回的数据,再释放事件ID和删除相关缓存数据
这样就完成了发送数据后同步接收过程
TCP套件用的是 客户端/服务器组件
代码包含了 组包/拆包
该思路方法通用于所有TCP模块或支持库,如有需要请自行移植!