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