websocket 无法绑定TCP端口

pn9klfpd  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(179)

我需要在我的开发机器和另一种类型的服务器机器之间建立TCP连接。两者都在同一个路由器内,在同一个公共IP下。
当我尝试使用路由器的公共IP在这些设备之间创建TCP连接时,我无法建立连接。连接尝试失败。
我已经在我的路由器中配置了所有的东西,并且我已经用一个简单的Python TCP脚本使用公共IP测试了端口转发。它工作正常!此外,当我使用私有IP时,TCP连接的建立没有任何问题。
开发机器:MacBook
代码:

new InetSocketAddress(serverIpAddress, serverTcpPort)

例外情况:

Bind failed for TCP channel on endpoint [/<My Public Ip>:8132]
java.net.BindException: Can't assign requested address
    at java.base/sun.nio.ch.Net.bind0(Native Method)
    at java.base/sun.nio.ch.Net.bind(Net.java:459)
    at java.base/sun.nio.ch.Net.bind(Net.java:448)
    at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
    at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
    at akka.io.TcpListener.liftedTree1$1(TcpListener.scala:59)
    at akka.io.TcpListener.<init>(TcpListener.scala:56)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at akka.util.Reflect$.instantiate(Reflect.scala:68)
    at akka.actor.ArgsReflectConstructor.produce(IndirectActorProducer.scala:101)
    at akka.actor.Props.newActor(Props.scala:212)
    at akka.actor.ActorCell.newActor(ActorCell.scala:650)
    at akka.actor.ActorCell.create(ActorCell.scala:676)
    at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:549)
    at akka.actor.ActorCell.systemInvoke(ActorCell.scala:571)
    at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:293)
    at akka.dispatch.Mailbox.run(Mailbox.scala:228)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:241)
    at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

如何解决此问题?我想知道为什么它可以用我的私人IP,但不能用公共IP。
此外,我不小心输入了一个私人IP地址,但连接仍然失败。
TCP套接字服务器是否在尝试绑定端口时检查客户端是否可用?

w3nuxt5m

w3nuxt5m1#

当我尝试使用路由器的公共IP在这些设备之间创建TCP连接时,我无法建立连接。连接尝试失败。
您不能绑定到未分配给该计算机的IP地址。您需要绑定到路由器地址或机器的LAN地址。
请注意,您仍然可能无法从LAN内部访问路由器的公共IP地址上的计算机。这需要路由器支持发夹NAT,但并非所有路由器都支持。

相关问题