【问题标题】:Better way to create bidirectional communication创建双向通信的更好方法
【发布时间】:2012-07-27 19:28:59
【问题描述】:

我最近在 Android 3.2 上做了一个项目,通过 TCP 连接将字符串发送到我的 PC 中的服务器。我必须做一个线程来实现这一点,这是我在 Java 程序中不需要做的事情。我也使用了AsyncTask 方法,但是除了doInBackground 函数(我在其中创建了套接字连接)之外,我无法使用其他函数发送信息。

为了发送字符串,我在doInBackground 函数中创建了一个循环,因此它一直在等待接收要发送到计算机的新消息。这样做的问题是我无法进行双向通信。在这个项目之后,我继续尝试使用除doInBackground 函数之外的其他函数发送字符串。最后,我成功使用了 Android 1.6。

遗憾的是,由于需要线程,并且您需要在创建套接字连接的同一函数中发送消息,因此无法在高级版本的 Android 中使用此方法。

我想知道在较新版本的 Android 中是否有更好的方法来执行双工操作。

【问题讨论】:

    标签: android tcp bidirectional


    【解决方案1】:

    您可以在任何安卓版本中使用Threads。

    做你想做的事情的正确方法是创建一个Servicehttp://developer.android.com/reference/android/app/Service.html)并在Service中使用单独的Threads来发送和接收数据。

    【讨论】:

    • 感谢您的回答。今天我正在研究服务和处理程序,我必须更多地学习并尝试做一个应用程序这个link显示了我用于我的应用程序的相同方法。对我来说,它只在 android 1.6 中作为双向工作,并且作为只有在后操作系统中使用循环的客户端才执行后台功能。我只是好奇为什么不能在后部 os 中工作,因为我在很多地方都看到过这个例子。但我会研究你告诉我的,看看其中的差异。
    • 好吧,您刚刚发布的示例并没有打开连接。它会在读取服务器发送的数据后关闭。如果服务器不发送任何内容,它几乎会立即关闭,您也将无法发送任何内容。您必须保持连接打开,并收听传入的数据,但AsyncTask 不是实现此目的的方法,但背景为Threads 的Service 是。
    • 嗯,基本上我的理解,就是当你必须做的后台进程时它使用的服务很长(因为在我的情况下我不需要使用来自其他应用程序的服务),它是与在小型后台进程中使用的 AsyncTask 相反。该服务没有线程,但您可以在其中创建一个线程来创建 tcp/ip 连接。我正在使用 AsyncTask 的示例,在清单中我将 minSdkVersion 从 10 更改为 8 并且它可以工作。
    • 我必须研究一种算法来创建双向通信而不使用不同的函数,因为在高于 8 的 sdk 版本中,您只能在创建连接的同一位置建立通信。或者像你说的那样,创建两个线程,一个用于接收,另一个用于发送,但我必须尝试一下。好吧,基本上我相信这一点,我不知道我是否没有明白你的意思,再次感谢你的帮助。
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多