在同一端口上连续运行程序

时间:2011-05-24 12:15:29

标签: java linux sockets centos thrift

我在CentOS 5上运行一些java代码

java Something.java &

在某个端口上创建一个套接字....说9090 ..然而,代码没有完全运行,所以我Ctrl-C就出现了。

当我再次尝试运行该程序时,它错误地说它无法连接到端口9090

当我将端口号更改为9010之类的任意内容时......一切都有效(除了Something.java被卡住的事实).... churn and repeat

发生了什么事?我希望能够为这些东西使用一个一致的端口...是否有一些后台进程我不是每次都摆脱它?

谢谢!

2 个答案:

答案 0 :(得分:2)

这可能是因为操作系统有一些隔离延迟,直到另一个进程可以重用该地址。

C库提供套接字选项SO_REUSEADDR,可以设置它以避免这种情况。快速网络搜索表明setReuseAddress(boolean)中的java.net.ServerSocket可用于设置此选项。

答案 1 :(得分:0)

JVM可能需要一些时间来实际完成程序并释放套接字。

当ctrl-c使用Runtime.getRuntime().addShutdownHook(...)终止软件时,您可以手动关闭套接字,我强烈建议所有在后台运行并使用套接字的软件。应该有所帮助。