gpt4 book ai didi

Android与C++套接字通信

转载 作者:行者123 更新时间:2023-11-28 01:56:13 25 4
gpt4 key购买 nike

我正在开发一个应用程序,每秒从 C++ 程序接收数据。该应用程序有时还需要向 C++ 程序发送数据。使用套接字作为两个实例之间的通信是否合适?对于每个实例,它是否必须同时运行套接字服务器和客户端?

最佳答案

我认为根据所需的计时行为(设备是否必须同步接收消息,是否应该缓存不能及时传递的消息直到它们被传递等)、公共(public)可达性,有不同的方法来实现这一点android 设备(如果它们通过移动网络连接,它们在许多移动网络中位于 NAT 之后)以及设备是否可以进入待机模式。

使用流套接字 (TCP) 如果移动设备始终保持唤醒状态或处理必须始终同步进行。

在这种情况下,一端必须是“服务器”,一端必须是“客户端”。因为移动设备往往会进入待机模式,所以我会使用 C++ 程序(如果它在非移动设备上运行)作为服务器——这将是创建套接字、绑定(bind)它然后使用监听等待的结束用于传入连接。每当客户端连接到服务器时,它都必须接受连接,然后可以通过使用相同的句柄进行发送和接收来双向使用该连接。

然后移动设备将创建一个套接字并连接到服务器并可以向它传输数据(它不必绑定(bind)或监听)。通过相同的连接,设备可以从服务器接收数据。

如果服务器需要向移动设备发送数据,即使移动设备尚未建立连接并且移动设备能够进入待机模式,则可以定期唤醒设备并轮询服务器或使用firebase 云消息系统甚至短消息服务,或者 - 如果设备无法进入待机模式 - 也只需创建一个监听套接字来接受来自 C++ 应用程序的传入连接。

使用数据报套接字 (UDP)

在这种情况下,C++ 应用程序和 Android 应用程序都将创建套接字并将其绑定(bind)到特定端口。然后他们都可以简单地向其他客户端发送数据包(不可靠),甚至可以通过向它们发送多播地址来在局域网中多播它们。当然,移动设备在待机模式期间会丢失从 C++ 应用程序发送的数据包,而 C++ 应用程序在未运行期间也会丢失数据包。

使用消息队列(如果移动设备可能进入待机模式并且必须异步接收消息)

在这种情况下,如果队列是持久的,两个程序就不必同时运行,但消息代理必须(例如 RabbitMQ)。 C++ 应用程序可以简单地将消息推送到队列中,任何订阅的移动设备都会立即或(对于持久队列)稍后在设备连接到服务器时接收它们。

如果不需要同步行为,或者通过传统的网络服务甚至套接字,也可以通过消息队列实现从移动设备到服务器的消息传递。

关于Android与C++套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41109352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com