Android - 在已经调用getInputStream()的同时通过套接字发送数据

时间:2015-02-08 17:09:38

标签: android sockets

我正在为Android制作一种消息传递应用程序,数据交换是通过套接字完成的。所以我遇到了以下问题。

单独完成从服务器接受数据。发送数据也是如此。但是,在取得进展的同时,我通过在循环中运行socketObject.getInputStream()函数来创建服务,不断等待来自服务器的新数据。如果我尝试通过套接字从客户端向服务器发送数据,则阻止发送数据的线程,此处通过按下按钮启动发送,并在以下代码中执行:

PrintWriter printwriter;
        try {
            printwriter = new PrintWriter(client.getOutputStream(), true);
            printwriter.write(message);
            printwriter.flush();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

如果我处理它并确保在发送数据时没有调用socketObject.getInputStream(),则没有问题。

那么,我该怎么办?如果我的方法出了问题,请告诉我应该做些什么。如果事情是这样,我想知道是否有办法阻止getInputStream()函数等待数据,所以我可以让我的发送代码轮流工作,而不会终止套接字。

2 个答案:

答案 0 :(得分:0)

您正在处理的问题是您处理数据接收和数据发送的方式。长话短说,为了接收你需要使用套接字的getInputStream()循环等待的消息(正如你已经在做的那样)。为了发送消息,您需要使用getOutputStream(),这可以(或者可能应该)由UI线程完成。

我会给你这个好tutorial所以你可以知道我在说什么(不一定要复制/粘贴)

答案 1 :(得分:0)

不要为每条消息创建新的PrintWriter。在套接字的生命周期内创建一次。那么你根本不必在这里打getOutputStream()。同样,无论您使用哪种流/阅读器来阅读输入,只需创建一次,然后您就不必在阅读循环中调用getInputStream()