我正在为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()
函数等待数据,所以我可以让我的发送代码轮流工作,而不会终止套接字。
答案 0 :(得分:0)
您正在处理的问题是您处理数据接收和数据发送的方式。长话短说,为了接收你需要使用套接字的getInputStream()
循环等待的消息(正如你已经在做的那样)。为了发送消息,您需要使用getOutputStream()
,这可以(或者可能应该)由UI线程完成。
我会给你这个好tutorial所以你可以知道我在说什么(不一定要复制/粘贴)
答案 1 :(得分:0)
不要为每条消息创建新的PrintWriter
。在套接字的生命周期内创建一次。那么你根本不必在这里打getOutputStream()
。同样,无论您使用哪种流/阅读器来阅读输入,只需创建一次,然后您就不必在阅读循环中调用getInputStream()
。