SNMP 错误,端口已被占用。

3

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

6个回答

2

只需启动您的应用程序。如果出现BindException异常,则表示端口已被占用。如果没有异常,则可以运行您的应用程序。提前知道这一点并不能为您带来任何帮助。


这并不总是正确的。端口绑定可能由于许多原因而失败,不仅仅是因为端口已经被使用。要确定出了什么问题,请检查java BindException中的错误消息,或者在C/C++应用程序中的bind调用后检查errno值。 - lucassm

1

1

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


0
在Windows上,您可以使用netstattasklist。例如,
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

tasklist /fi "PID eq 1620"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
snmp.exe                      1620 Services                   0      1,172 K

在我的情况下,显然是Windows SNMP服务使用端口161。在你的情况下,可能是另一个进程。


0
1)ps -efww | grep 161   

2)netstat -anp | grep 161

0

以下语句对我有效。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接