0
我正在用Java编写一个简单的服务器,并且我能够从服务器端的客户端检索传入数据,但由于2000毫秒超时而无法在客户端进行传入。任何人都知道为什么这次超时?Java套接字超时:损坏的管道
这是服务器的代码:
private static void listen() throws IOException {
while(true) {
Socket clientSocket = serverSocket.accept();
StringBuilder bufferedStringInput = new StringBuilder();
CharBuffer cbuf = CharBuffer.allocate(4096);
try {
InputStream is = clientSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF8"));
int noCharsLeft = 0;
while ((noCharsLeft = br.read(cbuf)) != -1) {
char[] arr = new char[noCharsLeft];
cbuf.rewind();
cbuf.get(arr);
bufferedStringInput.append(arr);
cbuf.clear();
}
System.out.println(bufferedStringInput.toString());
} catch (IOException e) {
System.out.println("Error received client data: " + e.getMessage());
}
String message = "Hello client";
try {
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
out.print(message);
} catch (IOException e) {
System.out.println("Error getting output stream from client: " + e.getMessage());
}
clientSocket.close();
}
}
谢谢@EJP,我现在要解决这个问题。但为什么'compact()'优先于'clear()'? – cbrad 2014-10-27 01:26:46
这是一个标准的习惯用法:'flip(),get(),compact()。'以防万一你没有'get()'例如。这在写作时尤其适用。 – EJP 2014-10-27 04:32:05