Android - 在服务器和客户端之间发送数据

Android - 在服务器和客户端之间发送数据

问题描述:

我正在做一个应用程序,它允许人们在它们之间共享文件。现在我正在尝试分享文本,但很快我会将其更改为“文件”。但是我在创建Socket连接时遇到了一些麻烦(这两个设备已经通过热点连接了:其中一个是热点,另一个连接到它)。Android - 在服务器和客户端之间发送数据

我打算做一个普通的java套接字连接,但后来我在这里读到,如果手机进入睡眠状态,套接字将关闭/超时。你们推荐的解决方案是使用Intent Services。

我创建了两个IntentServices,一个ClientCommService和一个ServerCommService。我在onHandleIntent()方法中创建了这个方法,我应该创建套接字并开始监听/等待任何传入的消息(创建流对象并启动套接字)。我的问题是,我也想发送消息,我不知道我应该把逻辑发送消息this.out.writeObject()。 这很重要,因为我想创建一个可以由任何成员(服务器或客户端)启动的双向通信。

问题2:我在这里看到的一些方法在stackoverflow上,只为服务器创建了一个IntentService。为什么?

如果您想在手机进入睡眠状态后继续保持服务状态,那么您需要创建Service而不是IntentService

此外,您还需要保持您的服务为STICKY服务。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return START_STICKY; 
} 

请记住,此服务正在主线程上运行,所以您需要照顾您的代码不会中断UI线程。

您可以将您的客户端/服务器逻辑放在onStartCommand方法中。

+0

因此IntentService不起作用?顺便说一下,我应该在哪里放置发送逻辑?我想要一个双向连接.. 感谢您的帮助 –

+0

IntentService管理它的队列,所以它将是FIFO系统,但我想你的情况可能会超过一个操作将在那里。您可以在onStartCommand方法内编写客户端服务器逻辑,因为客户端和服务器逻辑将独立调用。 – dhams

+0

更新:我不能把onStartCommand的逻辑,因为它会给我networkonmainthread异常。我设法把它工作,但现在我有其他问题,事实上,因为我有一个服务内部2线程(这是在不同时间发射),我有套接字已在使用中的问题。 –