ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
代理服务器的功能是接收数据,通过parser解析出JSON报文给handler进行处理,我们可以基于6.4的tcp\_server.c来完成;但这里我们选择用c++来实现,大同小异,大家可以移植cJSON进来,然后基于tcp\_server.c完成这个功能。 ### c++的实现代码在tcp\_task.cpp中: ![](https://img.kancloud.cn/08/af/08af9b76f733de46822040a07da7c02a_832x488.png =700x) ### 定义了两个类:tcp\_task和json\_task,继承关系:linker -> tcp\_task -> json\_task,然后json\_task重写packet和handle,实际上packet就是parser;主函数通过json\_task完成TCP服务器的搭建: ![](https://img.kancloud.cn/82/1b/821b961d2eaf38ad18349f5bd909bdfa_436x242.png =400x) ### 当我们收到数据时,会进入到json\_task的packet中,因此我们需要在packet中对流数据进行解析。 ![](https://img.kancloud.cn/a4/34/a434aa294f30abbb319f91457b90fd1e_832x478.png =700x) ### 这段代码完成流数据截取JSON报文的逻辑,接着到达handle中: ![](https://img.kancloud.cn/ab/30/ab3072d947f55b5c0cbf71a1b386d945_832x610.png =700x) ### JSON报文包含did和behavior,behavior取值是register和send;假设我们有一台设备(TCP客户端)连接进来,首先需要进行register然后才能向已经注册的设备发送数据报文。 ### 编译:直接 make 即可,编译完成输出文件cpp\_server: ![](https://img.kancloud.cn/14/ee/14eee36d42cc74591f7e89df516a413c_832x236.png) ### 运行cpp\_server和c\_client: ![](https://img.kancloud.cn/45/23/452356c191d7d52325358f279f278ba7_704x360.png =600x) ### * 客户端发送:{"did":"123456","behavior":"register"} * 服务端回复:{"ack":"ok"} ### 我们可以在手机上下载一个TCP的终端,然后尝试连接到这个服务器上发送数据;需要注意的是,手机需要和终端保持在同一个局域网下,查看终端的ip可以用ifconfig: ![](https://img.kancloud.cn/ec/97/ec974e6010f1773f4e4a0948f069b978_832x168.png =832x) ### 比如我查到的IP是192.168.10.228 ### 因此手机APP连接TCP也需要指定这个IP地址: ![](https://img.kancloud.cn/c2/a1/c2a17b897775ab7ee9a3c0e1e80d0a03_620x882.png =500x) ### 手机发送: {"did":"333333","behavior":"send","target":"123456","message":"Hi, my did is 333333"} ### 这个JSON报文会被服务器解析,由于behavior是send,目标target是123456,因此会把message也就是:"Hi, my did is 333333"转发出去;同时服务器回复手机APP响应信息ack。 ### 另一个终端会收到来自服务器转发的数据如下: ![](https://img.kancloud.cn/9e/f3/9ef3351332e644a2482b2a8c0508ac62_804x474.png =700x)