gpt4 book ai didi

java - 文件传输 Java 后关闭 ServerSocket 时出错

转载 作者:行者123 更新时间:2023-12-01 22:26:09 25 4
gpt4 key购买 nike

我有下面的代码当我没有 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,因为除非引发异常,否则构造函数必须始终生成新实例。

关于java - 文件传输 Java 后关闭 ServerSocket 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750554/

25 4 0
文章推荐: java - 并行化 + 参数化线程,每个线程的执行顺序随机
文章推荐: java - 可调用.getReturnType() : cannot reproduce Guava's example from the official wiki
文章推荐: java - 如何使用内部有另一个策略的策略来实现策略模式?
文章推荐: java - 不兼容的类型 : list cannot be converted to List