java 地址已在使用_如何避免java.net.BindException:地址已在使用中

以下代码运行了1个小时,然后关闭:

public class Mp extends JWindow implements MouseListener, MouseMotionListener {

public static Mp j;

private int serverPort = 0;

private ServerSocket serverSock = null;

private Socket sock = null;

public static void main(final String[] args) throws IOException, InterruptedException, Exception {

j = new Mp();

j.setVisible(true);

j.waitForConnections();

}

public void waitForConnections() {

while (true) {

try {

sock = serverSock.accept();

System.out.println("[TCPMediaHandler]: Accepted new socket");

TCPMediaHandler handler = new TCPMediaHandler(sock);

handler.start();

} catch (IOException e) {

e.printStackTrace(System.err);

}

}

}

public Mp() throws IOException {

this.serverPort = 38891;

serverSock = new ServerSocket(serverPort);

serverSock.setReuseAddress(true);

//serverSock.setSoTimeout(500);

//serverSock.setSoLinger(true, 0);

System.out.println("[TCPMediaHandler]: Server started");

this.v1.setBackground(Color.BLACK);

this.v1.addMouseListener(this);

/* Close the window */

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent we) {

System.exit(0);

}

});

}

当我重新运行同一件事时,它失败了java.net.BindException:

$ java -cp /var/tmp/dist/Mp.jar test.Mp

Exception in thread "main" java.net.BindException: Address already in use

at java.net.PlainSocketImpl.socketBind(Native Method)

at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)

at java.net.ServerSocket.bind(ServerSocket.java:336)

at java.net.ServerSocket.(ServerSocket.java:202)

at java.net.ServerSocket.(ServerSocket.java:114)

at test.Mp.(Mp.java)

at test.Mp.main(Mp.java)

大约需要3至4分钟才能再次成功执行。关闭后如何使它立即工作?

跟进:

$ netstat | grep 38891

tcp 35 0 localhost:38891 localhost:37842 CLOSE_WAIT

tcp 0 0 localhost:34955 localhost:38891 ESTABLISHED

tcp 32 0 localhost:38891 localhost:37824 CLOSE_WAIT

tcp 0 0 localhost:38891 localhost:34955 ESTABLISHED

$ lsof -w -n -i tcp:38891

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

xdg-scree 5254 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

xdg-scree 5355 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

xdg-scree 5455 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

telnet 7058 sun 3u IPv4 242987 0t0 TCP 127.0.0.1:34955->127.0.0.1:38891 (ESTABLISHED)

sleep 9002 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

sleep 9005 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

sleep 9008 sun 29u IPv4 231948 0t0 TCP *:38891 (LISTEN)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值