首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Akka IO在Tcp客户机上发送非ByteString

使用Akka IO在Tcp客户机上发送非ByteString
EN

Stack Overflow用户
提问于 2017-05-10 16:19:21
回答 1查看 515关注 0票数 1

我正在使用akka-io创建一个Tcp客户端Actor,它通过套接字与非jvm(非akka)服务器通信。因为akka-io发送ByteString,并且程序需要输出一个常规的String,所以ByteString消息从未被处理过。一个非常粗糙的基于java的方法来实现这个实际的工作

代码语言:javascript
复制
override def receive: Receive = {
    case ClientTcpActor.Start =>
      val socket = new Socket(socketAddress.getHostName, socketAddress.getPort)
      val out = new PrintWriter(socket.getOutputStream, true)
      out.println("Hello World!")
      import java.io.BufferedReader
      import java.io.InputStreamReader
      val is = socket.getInputStream
      val isr = new InputStreamReader(is)
      val br = new BufferedReader(isr)
      val message = br.readLine
      println(s"Message received from the server : $message")
}

我能够发送一条消息到tcp端口并接收回一个响应。

然而,这种akka-io方法不起作用。具体来说,我从不从套接字接收数据,因为外部应用程序无法处理由ByteString对象发送的Write

代码语言:javascript
复制
def receive: PartialFunction[Any, Unit] = {
    case CommandFailed(_: Connect) =>
      log.info("Connection failed.")
      context stop self

    case c@Connected(_, _) =>
      log.info("Connect succeeded.")
      val connection = sender()
      connection ! Register(self)
      val message = ByteString("hello world")
      log.info(s"Sending request message ${message}")
      connection ! Write(message)

    case Received(data) =>
      log.info(data.toString())


    case _: ConnectionClosed =>
      log.info("Connected is closed!")
    case _ =>
      log.info("Something else is up.")
  }

我还创建了自己的akka-IO服务器应用程序,该应用程序处理同一端口上的数据,并验证了我实际上是在向端口发送消息,但是需要akka服务器参与者来处理ByteString的解码。

我希望这是我忽略的一些简单的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2017-05-12 14:03:25

在网络上,没有StringByteString这样的东西,只有字节。ByteString本质上只是字节数组的包装器,以确保它们不发生变异(因为这样做需要同步,才能在线程/参与者之间安全地共享)。当您从一个ByteString创建一个String时,它将使用一个编码(在本例中是UTF8)将字符串编码为字节。

不能从您包含的代码片段中说出问题所在,但是文档中有一个完整的示例客户机,它可能有助于将您的代码与:http://doc.akka.io/docs/akka/current/scala/io-tcp.html#Connecting进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43897928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档