使用android 2.3.3,我有一个后台服务,它有一个套接字连接。有一个Thread从套接字中连续读取:
BufferedReader in = new BufferedReader(new InputStreamReader(mSock.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
... do stuff
}
// Socket has been closed (?)
in.close();
然后在我的主线程中我打电话:
private void writeSocket(String line) {
mSock.getOutputStream().write(line.getData("US-ASCII"));
}
当我调用writeSocket时,write()不会抛出异常,但是我没有看到另一端的数据,并且当write()发生时,读取线程中的in.readLine()立即返回null 。根据我的阅读,从不同的线程同时读取和写入相同的套接字应该是安全的吗?似乎写入导致套接字关闭,但我没有异常..
答案 0 :(得分:1)
最有可能的是,连接的另一端正常关闭。这会导致read
和write
终止。 (通常情况下,没有异常。这就像尝试读取文件末尾一样。)您可以同时从不同的线程读取和写入,如果套接字关闭,无论是正常还是异常,两个操作都将失败。