我有一个Java程序从TCP源读取数据的工作都很好,除非我的程序(它充当数据源的客户端)比那时更快源可以响应BufferedReader.ready()抛出一个异常,它会关闭我的TCP连接,因为它应该如此。是否有任何首选的方法/方法可以让BufferedReader等待新的输入,因为我的源有时可能会有轻微的延迟。缓冲套接字读取器不等待远程连接的数据
这是我讲的一部分:你不应该使用ndataServerReader.ready()
public aDataServer(String host, int port, StreamConnection aConnection) throws UnknownHostException, IOException {
this.aConnection = aConnection;
ndataServerSocket = new Socket(Inet4Address.getByName(host),port);
ndataServerReader = new BufferedReader(new InputStreamReader(ndataServerSocket.getInputStream()));
}
public void run() {
try {
RemoteDevice dev = RemoteDevice.getRemoteDevice(aConnection);
OutputStream outputStream = aConnection.openOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(outputStream);
do {
try {
String ndata = ndataServerReader.readLine();
osw.write(ndata+"\n");
osw.flush();
LOG.log(Level.INFO,"Sent");
} catch(IOException io) {
LOG.log(Level.SEVERE, "Client device({0}) disconnected: \n{1}", new Object[]{dev.getFriendlyName(true), io.getMessage()});
break;
}
}while(ndataServerReader.ready());
} catch (IOException ioe) {
LOG.severe(ioe.getMessage());
} finally {
try {
if (ndataServerSocket != null) {
ndataServerSocket.close();
}
if (ndataServerReader
!= null) {
ndataServerReader.close();
}
} catch (IOException ex) {
LOG.log(Level.SEVERE, ex.getMessage());
}
}
什么是抛出异常?你能否包含你如何构建和读取BufferedReader的代码片段? – dimo414 2013-03-10 19:43:19
用一些代码更新了我的问题 – user1945235 2013-03-10 19:53:04
您是否也可以发布异常输出? – dimo414 2013-03-10 19:58:38