gpt4 book ai didi

scala - Akka 使用同一个端口创建两个 Tcp 连接

转载 作者:可可西里 更新时间:2023-11-01 02:51:06 24 4
gpt4 key购买 nike

我正在尝试创建两个绑定(bind)到同一端口的 tcp 连接。我收到一条错误消息,指出 java.net.BindException: Address already in use。这是有道理的,因为它们都使用 18333 作为端口,但必须有某种方式在具有唯一主机的端口上建立两个连接。我正在关注 guide in the akka tcp manual .我怎样才能使这项工作?该协议(protocol)规定需要在 18333 上创建连接,但是如果我一次只能有一个对等点,它会使协议(protocol)的 p2p 部分变得无用。

代码如下:

val probe1 = TestProbe()
val probe2 = TestProbe()
val client1 = system.actorOf(Client.props(TestNet3, probe1.ref))
val client2 = system.actorOf(Client.props(TestNet3, probe2.ref))

val local = new InetSocketAddress(18333)

val remote1 = new InetSocketAddress("testnet-seed.bitcoin.petertodd.org", 18333)

client1 ! Tcp.Connect(remote1,Some(local))
probe1.expectMsgType[Tcp.Connected]

val remote2 = new InetSocketAddress("testnet-seed.bluematt.me", 18333)
client2 ! Tcp.Connect(remote2,Some(local))
probe2.expectMsgType[Tcp.Connected]


client1 ! Tcp.Abort
client2 ! Tcp.Abort

最佳答案

您需要查找如何让 akka 为您的套接字设置 SO_REUSEADDR。这必须在 Tcp.Connect 中发生,因此您可能必须传递类似 SO.ReuseAddr(true) 的内容作为套接字选项。

OP 根据答案解决问题的代码:

val options = List(Inet.SO.ReuseAddress(true))
client1 ! Tcp.Connect(remote1, Some(local1), options)

Inet.SO documentation

关于scala - Akka 使用同一个端口创建两个 Tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38314437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com