Java 端口已在使用的SNMP错误

Java 端口已在使用的SNMP错误,java,port,snmp,Java,Port,Snmp,我已经创建了一个SNMP代理模拟器应用程序,它使用端口号161来模拟设备。有时会出现端口alredy in use异常。如何知道161端口是否繁忙 使用netstat命令 具体来说, netstat-s[端口号] 比如说, netstat-s161 只需启动应用程序。如果收到BindException,则表示该端口正在使用中。如果没有,应用程序可以运行。提前知道这一点并不能给你带来任何好处。在Windows上,你可以使用netstat和tasklist。比如说, netstat -aon |

我已经创建了一个SNMP代理模拟器应用程序,它使用端口号161来模拟设备。有时会出现端口alredy in use异常。如何知道161端口是否繁忙

使用netstat命令

具体来说,

netstat-s[端口号]

比如说,

netstat-s161


  • 只需启动应用程序。如果收到BindException,则表示该端口正在使用中。如果没有,应用程序可以运行。提前知道这一点并不能给你带来任何好处。

    在Windows上,你可以使用
    netstat
    tasklist
    。比如说,

    netstat -aon | findstr 161
    
    它的产出应该是

    C:\Program Files\Microsoft Visual Studio 9.0\VC>netstat -aon |findstr 161
      UDP    0.0.0.0:161            *:*                                    1620
      UDP    [::]:161               *:*                                    1620
    
    然后使用任务列表

    tasklist /fi "PID eq 1620"
    
    Image Name                     PID Session Name        Session#    Mem Usage
    ========================= ======== ================ =========== ============
    snmp.exe                      1620 Services                   0      1,172 K
    

    在我的例子中,显然是Windows SNMP服务使用端口161。在您的情况下,这可能是另一个过程。

    只是补充说明。我认为您可能被禁止使用较低的端口号(如果不是根用户,则使用安全策略)-请尝试使用较高的端口号,即10161。

    下面的语句适合我

    1)ps -efww | grep 161   
    
    2)netstat -anp | grep 161
    
    netstat -lnp
    
    示例用法:

    appuser@-app:~$ sudo netstat -lnp |grep 162
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1162/mysqld
    udp6       0      0 127.0.0.1:162           :::*                                6830/java
    

    这并不总是正确的。由于多种原因,端口绑定可能不成功,不仅仅是因为端口已在使用中。要确定出了什么问题,请检查java BindException中的错误消息,或C/C++应用程序中的errno值(在bind调用之后)。