使用作为 Akka.NET 源代码的一部分提供的示例聊天服务器/客户端项目,我尝试对其进行修改,使其能够在我的网络上的两台计算机上成功运行。
我有两个系统通过这样的路由器连接
192.168.0.29 (Server) <---------------| Router |---------------> 192.168.0.52 (Client)
然后我有两个配置如下的演员系统:
服务器:
akka {
actor {
provider = remote #Specify remote provider
}
remote {
dot-netty.tcp {
port = 666 #Akka server port number
hostname = 0.0.0.0 #Bind to all local network interfaces
public-hostname = 192.168.0.29 #Expose public IP to enable correct routing of public messages.
}
}
}
客户:
akka {
actor {
provider = remote
}
remote {
dot-netty.tcp {
port = 0 #Tell Akka that this is a client connection/use random port.
hostname = 192.168.0.29 #Tell Akka.NET which remote instance to connect to
}
}
}
不幸的是,虽然我能够在本地成功连接到聊天服务器,但无论我如何配置 Hocon,我似乎都无法让远程实例绑定到位于机器上的服务器 actor 192.168.0.29
。
我收到的具体错误消息
[ERROR][27/11/2019 4:58:36 PM][Thread 0004][Akka.Remote.Transport.DotNetty.TcpTransport] Failed to bind to 192.168.0.29:0; shutting down DotNetty transport.
Cause: System.Net.Sockets.SocketException (10049): The requested address is not valid in its context
at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
此错误消息向我表明 Akka.NET 没有可用的套接字可以访问。
具有讽刺意味的是,前段时间我问了一个非常相似的问题,当时它帮助我解决了连接问题,但直到最近我才再次使用 Akka.NET。
我注意到两台机器的防火墙都关闭了,并且可以成功地相互 ping,我还尝试了各种设置组合。
Akka.NET 服务器/客户端应用程序的原始源代码位于此处,我当前的版本位于此处。
谁能提供任何关于我可能做错了什么以及如何改进我对 Akka.NET 远程连接的调试的见解?例如,有没有一种方法可以验证服务器上的 Actor 系统192.168.0.29
是否可以从192.168.0.52
外部访问?