[英]Error closing ServerSocket after file transfer Java
我有下面的代碼當我沒有close ServerSocket語句時,我收到一條錯誤消息,說它是資源泄漏,但是當我添加close語句時,Eclipse告訴我代碼無法訪問,如何更改代碼以關閉外部套接字while語句中的?
serverSocket = new ServerSocket(ServerPort);
File incomingFile = new File("testfile.txt");
while (true) {
System.out.println("Waiting For File");
Socket incomingSocket = serverSocket.accept();
byte[] mybytearray = new byte[(int) incomingFile.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(incomingFile));
bis.read(mybytearray, 0, mybytearray.length);
bis.close();
OutputStream os = incomingSocket.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
if (incomingSocket != null) {
incomingSocket.close();
}
}
if(serverSocket != null) {
serverSocket.close();
}
防止資源泄漏的正確方法是使用try..finally
serverSocket = new ServerSocket(serverPort);
try {
File incomingFile = new File("testfile.txt");
while (true) {
// your code
}
} finally {
serverSocket.close();
}
或像這樣使用try-with-resources
構造
try (serverSocket = new ServerSocket(serverPort)) {
File incomingFile = new File("testfile.txt");
while (true) {
// your code
}
}
代碼無法訪問的原因是您的while
循環未終止。 還要注意,在代碼中的那一點, serverSocket
不能為null,因為除非拋出異常,否則構造函數必須始終導致新實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.