我想使用Hercules(由 HW-Group 提供)模拟一个 TCP 服务器。
当我配置端口(12714)时,netstat -aon | findstr "12714"
显示此结果:
DOS Prompt>netstat -aon | findstr "12714"
TCP 0.0.0.0:12714 0.0.0.0:0 LISTENING 29408
有人知道如何获取 TCP 服务器地址“127.0.0.1:12714”而不是“0.0.0.0:12714”(或任何其他 IP 地址,我只是想摆脱这个广播地址)吗?
我问的原因是:bind()
对该 IP 地址/端口执行了 a,结果出现以下异常:
Communication.TcpConnection.Connect | TcpConnection: Connecting failed (127.0.0.1:12714):
System.Net.Sockets.SocketException (0x80004005): The requested address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at Server.Communication.TcpConnection.Connect() in
C:\...Communication\TcpConnection.cs:line 60
提前致谢
在这种情况下,它不是一个广播地址 - 它是“所有本地地址”通配符地址。
侦听器程序需要指定要
bind()
连接到哪个本地地址。如果未指定任何地址,则套接字将绑定到属于该机器的所有地址。请联系程序开发人员添加此类选项 - 或者使用ForceBindIP之类的东西来注入正确的 bind() 调用。任何绑定到通配符地址的套接字都会自动包含环回地址,因此如果您的程序没有选项来更改其绑定到的内容,并且您的目标是限制服务器,那么使其成为“仅限本地”的最简单方法是将其绑定到 0.0.0.0 并使用 Windows 防火墙(
wf.msc
)来阻止任何不需要的传入连接。