In my application, I create an instance of ServerSocket with some port. After I'm done, I close the socket, but when I try to create a new ServerSocket on the same port, it throws:
"java.net.BindException: Address already in use"
If I create a ServerSocket with a different port, then it works.
ServerSocket.isClosed also returns true
What is the problem?
public void run() { try { BufferedInputStream bufferedinputstream = new BufferedInputStream( new FileInputStream(fileReq)); BufferedOutputStream outStream = new BufferedOutputStream( cs.getOutputStream()); byte buffer[] = new byte[1024]; int read; System.out.println(cs); while ((read = bufferedinputstream.read(buffer)) != -1) { outStream.write(buffer, 0, read); outStream.flush(); } System.out.println("File transfered"); outStream.close(); bufferedinputstream.close(); try { this.finalize(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (Exception e) { System.out.println("Exce...."); System.out.println(e.getMessage()); } finally { if ( cs != null) try { int usedPort=cs.getLocalPort(); System.out.println("Closing "+cs); cs.close(); System.out.println(cs+" Closed"); System.out.println("asd"+cs.isClosed()); portManager.getInstance().mp.put(usedPort,true); } catch (IOException e) { System.err.println("in sendToClient can't close sockt"); System.err.println(e.getMessage()); } }
source share