当前位置: 首页 > 知识库问答 >
问题:

如何正确处理tcp输入流-Java /Android

寿毅庵
2023-03-14

我正在创建一个android应用程序,它需要一个到服务器的永久TCP连接。

我创建了一个服务,用于建立连接并侦听Inputstream上的传入字节(该服务在后台运行)。

public  class TCPServiceConnection extends Service{
        //variables......
        //...............
        public void onCreate() { 
               establishTCPConnection(): 
        }

前4个传入字节表示完整消息的消息长度。

在将完整的消息从Inputstream读入单独的缓冲区后,我想在分析消息的单独线程中调用另一个服务/异步任务。(服务应继续侦听更多传入消息)。

        public handleTCPInput() {
               while(tcp_socket.isConnected()) {
               byte[] buffer = readCompletemessagefromTCPInputstream; 
               calltoAnotherThreadToanalyzeReceivedMessage(buffer); 
               }
               //handle exceptions.......
        }

Android/Java中是否有一个现有的Messagequeue系统已经处理了对我的分离字节[]缓冲区的多重访问?

共有1个答案

漆雕亮
2023-03-14

为了实现这一点,我建议您启动一个处理程序线程,它将不断地从输入流中读取。

一旦读取了传入消息,它就会使用处理程序将其传递给主线程。

例如,handler。sendMessage()

现在,由于此处理不是一个繁重的操作,您可以决定主/UI线程来处理此信息,也可以启动异步任务来处理此信息。

 类似资料:
  • 问题内容: 用Java产生和使用外部进程的流(IO)的正确方法是什么?据我所知,由于可能的缓冲区大小有限,因此应在与生成进程输入并行的线程中使用java结束输入流(进程输出)。 但是我不确定我是否最终需要与这些使用者线程进行同步,或者仅等待进程退出以使用方法就足够了,以确保所有进程输出实际上都被消耗了?IE是否有可能,即使进程退出(关闭其输出流),流的Java端仍存在未读数据?实际如何知道该过程何

  • 我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序。 类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始: 这个方法工作得很好,只是它必须在else部分返回一个float。在本例中,它是一个零,因此当输入到计算器(例如)时,零会导致任何输出等于零。 有没有返回空浮点值的方法来克服这个问题

  • 问题内容: 任何人都可以澄清一下下面的过程是否是正确的处理流程流的方法,而没有任何流缓冲区已满和阻塞问题 我正在从Java程序中调用外部程序,正在使用ProcessBuilder来构建流程,执行之后 我正在使用一种方法来处理流程 在我的方法中,我试图处理流程流 readStream方法用于读取我的流文本。 问题答案: 不,那不是正确的方法。 首先,在某些系统上,您的代码将永远停留在调用中,因为该过

  • 我有一些代码,其中多个方法使用键盘,并在主方法中连续调用。我正在做的练习特别要求使用4种不同的方法,所以我不能把它们放在一起。最初,我用键盘。在每个方法的末尾关闭(),但当第二个方法运行时,无论调用顺序如何,这都会导致NoTouchElementException。通过卸下键盘。close(),代码现在可以工作了,但是我现在收到了资源泄漏的警告,因为键盘没有关闭。有人能告诉我一种关闭输入而不出错的

  • 问题内容: 我希望我的计时器一次执行一次actionPerformed方法(5秒一次),但是它多次在控制台“ Hello”中写入: 如何产生想要的效果?谢谢 问题答案: 如前所述,最好使用,但也可以在开始之前使用setRepeats():

  • 问题内容: Java的I / O类,,,和他们的不同子类中都有一个可抛出的方法。 对于处理此类异常的正确方法是否存在共识? 我经常看到建议,只是默默地忽略它们,但这是错误的,至少在打开用于写的资源的情况下,关闭文件时出现问题可能意味着无法写入/发送未刷新的数据。 另一方面,在阅读资源时,我还不清楚为什么会抛出异常以及如何处理。 那么有什么标准建议吗? 问题答案: 记录下来。 您实际上不能 做任何事