2011-05-24 49 views
0

我运行在CentOS一些Java代码5相继在同一端口上运行的程序

java Something.java & 

某一个端口上创建了一个套接字....发言权9090 ..however,代码没有按”吨完全运行,所以我Ctrl-C出来。

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

当我更改端口号的一些任意的东西一样9010 ...一切再次工作(除了一个事实,即Something.java卡)....流失,重复

这是怎么回事?我希望能够使用一个一致的端口这个东西......是否有一些后台进程我没有摆脱每次?

谢谢!

+0

你的'ps aux'显示是什么 - 你确定你没有离开“某事”运行,这将保持该端口打开?还可以尝试'lsof',它显示哪个应用程序正在使用每个打开的端口。 – Liv 2011-05-24 12:19:12

+0

lsof -i:port给我一个未找到的命令错误......我如何获取lsof? – algorithmicCoder 2011-05-24 12:36:27

+0

你需要以root身份运行lsof – Liv 2011-05-24 13:05:01

回答

2

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

C库提供的套接字选项SO_REUSEADDR可以设置为避免这种情况。快速网页搜索表示可以使用setReuseAddress(boolean)中的java.net.ServerSocket来设置此选项。

0

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

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

+0

我是否只需要将它粘贴到主要方法中? – algorithmicCoder 2011-05-24 12:35:56

+0

我把它放在我的'main'中,但是在我开始处理socket的线程之前。至于'addShutdownHook'的作用和如何处理,请检查http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html – Sorrow 2011-05-24 12:40:28

相关问题