如何使用scala读取tcp流

问题描述 投票:0回答:1

我有一个java jar,可以在特定端口上生成tcp流。

我运行像java -jar runner.jar这样的using java命令,这开始在端口8888上生成消息流。

当我做nc -l 8888时,我可以看到消息。

我想使用scala和另一个框架或工具(如akka,akka-stream)来阅读此流。

任何人都可以帮助我理解读取此tcp流的最佳工具,框架或任何其他技术。

我尝试使用以下代码的akka​​流: -

implicit val system = ActorSystem()
    implicit val mater = ActorMaterializer() val ss  = Tcp().outgoingConnection("127.0.0.1", 8888)
      .to(Sink.foreach(println(_)))
    Source.empty.to(ss).run()

我也试过了

Tcp().outgoingConnection(new InetSocketAddress("127.0.0.1", 8888))
        .runWith(Source.maybe[ByteString], Sink.foreach(bs => println(bs.utf8String)))

这不起作用。

我只需要自己阅读消息和处理。

谢谢

scala akka akka-stream
1个回答
0
投票

据我所知你想设置TCP服务器,这里是TCP Echo using akka streams的例子

def server(system: ActorSystem, address: String, port: Int): Unit = {
implicit val sys = system
import system.dispatcher
implicit val materializer = ActorMaterializer()

val handler = Sink.foreach[Tcp.IncomingConnection] { conn =>
  println("Client connected from: " + conn.remoteAddress)
  conn handleWith Flow[ByteString]
}

val connections = Tcp().bind(address, port)
val binding = connections.to(handler).run()

binding.onComplete {
  case Success(b) =>
    println("Server started, listening on: " + b.localAddress)
  case Failure(e) =>
    println(s"Server could not bind to $address:$port: ${e.getMessage}")
    system.terminate()
}

}

© www.soinside.com 2019 - 2024. All rights reserved.