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

&引用;java.net.BindException:地址已在使用中;当我已经在同一端口上运行服务时,java,serversocket,Java,Serversocket,我有一个服务器套接字程序,当我运行此程序时,会出现以下错误: 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

我有一个服务器套接字程序,当我运行此程序时,会出现以下错误:

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.
java.net.BindException:地址已在使用中
位于java.net.PlainSocketImpl.socketBind(本机方法)
位于java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
位于java.net.ServerSocket.bind(ServerSocket.java:328)
位于java.net.ServerSocket(ServerSocket.java:194)
位于Server.main(Server.java:20)
无法在端口5434上侦听。
postgres sql server已在此端口上运行,这解释了错误。我的硬件设备只向这个5434端口发送数据


有什么办法可以避免此错误?

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

了解哪个程序正在使用您的端口:

sudo netstat -nlp | grep 514

udp        0      0 :::514                :::*                            30186/java
告诉我一个java程序绑定在UDP端口514上 我的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。

您应该更改端口号。我也犯了同样的错误。在我更改端口号后,问题就解决了。

问题是什么,因为您似乎已经知道根本原因是什么?谢谢,但硬件设备只向postgres sql端口发送数据,我已尝试将postgres的端口号从5432更改为5434。但设备无法将其发送到5432。我已经将硬件设备端口更改为5434,现在它正在运行。那么解决方案是什么?