0
나는 akka.net.Udp
을 사용하여 UDP 패킷 (아래 코드)을 보냅니다. 로컬 컴퓨터 (127.0.0.1)로 보내면 문제가 없지만 다른 IP 주소로 동일한 코드를 실행하자마자 akka는 "잘못된 인수"(아래 출력)에 불만을 표시합니다.Akka UDP : 127.0.0.1이 아닌 대상으로 보낼 때 "잘못된 인수"
어떤 아이디어가 잘못 되었나요? 대상으로 127.0.0.1와
[DEBUG] [06/20/2016 11:54:39.753] [main] [EventStream(akka://Main)] logger log1-Logging$DefaultLogger started
[DEBUG] [06/20/2016 11:54:39.754] [main] [EventStream(akka://Main)] Default Loggers started
[DEBUG] [06/20/2016 11:54:39.851] [Main-akka.actor.default-dispatcher-2] [akka://Main/system/IO-UDP-FF/selectors/$a/0] Successfully bound to [/127.0.0.1:2222]
[INFO] [06/20/2016 11:54:40.783] [Main-akka.actor.default-dispatcher-5] [akka://Main/user/app/udp4] Send to /131.179.196.46:6363: ByteString(104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100)
[DEBUG] [06/20/2016 11:54:40.789] [Main-akka.actor.default-dispatcher-5] [akka://Main/system/IO-UDP-FF/selectors/$a/0] Invalid argument
[DEBUG] [06/20/2016 11:54:40.791] [Main-akka.actor.default-dispatcher-3] [akka://Main/system/IO-UDP-FF/selectors/$a/0] Closing DatagramChannel after being stopped
출력 : 로컬 컴퓨터 이외의 대상으로
package debug
import akka.actor.{Actor, ActorLogging, ActorRef, Props}
import java.net.InetSocketAddress
import akka.io.{IO, Udp}
import akka.util.ByteString
class SocketTest extends Actor with ActorLogging {
val dest = new InetSocketAddress("131.179.196.46", 6363) // Invalid argument
// val dest = new InetSocketAddress("127.0.0.1", 6363) // works fine
val udp = context.actorOf(Props(classOf[UDP4]), name="udp4")
// send
Thread.sleep(1000)
udp ! (dest, ByteString("hello world"))
Thread.sleep(99999)
def receive = {???}
}
class UDP4 extends Actor with ActorLogging {
val local = new InetSocketAddress("127.0.0.1", 2222)
import context.system
IO(Udp) ! Udp.Bind(self, local)
def receive: Receive = {
case Udp.Bound(local) => context.become(ready(sender))
}
def ready(connection:ActorRef): Receive = {
case (remote:InetSocketAddress, data:ByteString) => {
log.info(s"Send to ${remote}: ${data}")
connection ! Udp.Send(data, remote)
}
case Udp.Received(data, remote) => log.info(s"Receive from ${remote}: ${data}")
case Udp.Unbind => connection ! Udp.Unbind
case Udp.Unbound => context.stop(self)
}
}
출력
[DEBUG] [06/20/2016 11:55:37.213] [main] [EventStream(akka://Main)] logger log1-Logging$DefaultLogger started
[DEBUG] [06/20/2016 11:55:37.214] [main] [EventStream(akka://Main)] Default Loggers started
[DEBUG] [06/20/2016 11:55:37.280] [Main-akka.actor.default-dispatcher-4] [akka://Main/system/IO-UDP-FF/selectors/$a/0] Successfully bound to [/127.0.0.1:2222]
[INFO] [06/20/2016 11:55:38.234] [Main-akka.actor.default-dispatcher-2] [akka://Main/user/app/udp4] Send to /127.0.0.1:6363: ByteString(104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100)
"잘못된 인수"라는 유용한 텍스트가있는 IOException이 99 % 확실하게 발생합니다. 좀 더 세밀한 로깅을 활성화하고 사용중인 Akka, OS 등의 버전을 공개해야합니다. –