“java.net.BindException:地址已经在使用中”,当我已经在同一端口上运行服务时

2022-09-04 00:35:31

我有一个服务器套接字程序,当我运行这个程序时,我得到以下错误:

java.net.BindException: Address already in use
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
    at java.net.ServerSocket.bind(ServerSocket.java:328)
    at java.net.ServerSocket.<init>(ServerSocket.java:194)
    at Server.main(Server.java:20)
Could not listen on port: 5434.

postgres sql server 已经在此端口上运行,这解释了错误。我的硬件设备仅将数据发送到此 5434 端口。

我有哪些选择来解决此错误?


答案 1

特定于 Mac

我的java程序的一个实例已经在运行并占用了端口。因此,当我尝试启动一个新实例时,我得到了错误。为了杀死旧实例,我执行以下操作:

prompt> lsof -i:5434
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    71107 neoneye   68u  IPv6 0x4a0371dea87d2cd3      0t0  TCP *:http-alt (LISTEN)
prompt> kill 71107

顺便说一句。我不建议以这种方式停止postgresql。


答案 2

如果 postgresql 正在使用该端口,则您不能将此端口作为服务器端口打开。要么关闭postgresql,要么使用另一个端口。


推荐