Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-通过套接字发送数据,同时已调用getInputStream()_Android_Sockets - Fatal编程技术网

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

Android-通过套接字发送数据,同时已调用getInputStream(),android,sockets,Android,Sockets,我正在为Android制作一种消息应用程序,数据交换是通过套接字完成的。所以我有以下问题 从服务器单独接收数据做得很好。发送数据也是如此。然而,在取得进展的同时,我创建了一个服务,通过在循环中运行socketObject.getInputStream()函数,不断等待来自服务器的新数据。如果我试图通过套接字将数据从客户端发送到服务器,则发送数据的线程将被阻止,在这里,通过按下按钮启动发送,并在以下代码中执行: PrintWriter printwriter; try {

我正在为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()
函数等待数据,这样我就可以让我的发送代码在不终止套接字的情况下正常工作。

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


我会给你这个好处,这样你就可以知道我在说什么(不一定是复制/粘贴)

不要为每条消息创建一个新的
PrintWriter
。为套接字的生命周期创建一次。那么您根本不必在这里调用
getOutputStream()
。类似地,无论您使用什么流/读取器来读取输入,只要创建一次,就不必在读取循环中调用
getInputStream()