通过Android客户端套接字

时间:2018-02-08 12:20:16

标签: android sockets tcp udp

Description of what is working 如上所示,我在Raspberry Pi上运行了一个套接字服务器(在UDP中)。我的Android应用程序上还运行了一个套接字客户端。 目前,应用客户端始终启动通信,RasPi始终响应。

如果RasPi知道IP地址,它甚至可以启动通信并向任何人发送套接字数据包。 问题是我的应用程序必须等待线程永远接收数据(基本上是轮询)。如下所示:

uniSocket.receive(receivePacket);

RasPi和Android是否应该运行客户端和服务器,或者是否有像Datagram_Socket_Callback或某种异步方法来接收和发送数据。

1 个答案:

答案 0 :(得分:0)

接听电话将会阻止,直到有东西要收到。那不是民意调查;它只是在等待。如果没有通知发送,它可以在接听电话中等待几天。并且占用的资源不会超过在android端运行的服务器线程(等待连接)占用。

您可能需要某种定期保持活力以确保对方没有消失。您可以在应用程序层自己完成,或者TCP提供了一个保持活动机制,您可以使用setsockopt为此目的激活该机制。

换句话说,创建套接字,启用TCP保持活动,发送"我等待通知"消息到服务器,然后调用接收等待。然后,服务器维护等待通知的客户端连接列表,然后可以在有任何要发送的内容时通过连接发送数据。

对于正常的客户端 - 服务器通信,您可以使用相同的套接字,但以这种方式同步可能会更复杂,因此,您也可以并行创建另一个套接字。

我对Android / app开发知之甚少,但显然你的客户需要准备好重新创建连接,如果它被破坏了。我可以想到为什么在正常使用中会发生这种情况的原因很多。例如,可以从家庭网络上获得的IP地址创建初始连接。然后你走出你的房子,失去了IP地址。您现在可能需要使用单元网络上的不同IP地址(或咖啡店的无线网络等)重新创建连接。如果手机进入飞行模式,您可能会暂时丢失所有IP地址。

我确定可以创建一个在android中运行的服务器,但是你有RPi的问题需要知道android的IP地址可能会经常更改。我认为最好将客户端角色保留在android端。