如何将输入键和数据传递到套接字

时间:2019-07-07 10:29:18

标签: scala sockets spark-streaming unix-socket

我正在尝试创建一个实时环境,以一定时间间隔将数据从文件传递到套接字流。它可以正常工作,但是要使用socketTextStream读取数据,只有在按下Enter键时才会考虑数据。 因此,我希望按下键或传递可以解释为按下Enter键的内容。

我尝试用字符串添加“ \ n”:

dOut.writeUTF(values.replace(",","") )
dOut.writeChars("\n")

但是,它只是创建一个新行,但未添加回车键。

此外,我尝试通过以下方式传递它:

dOut.writeUTF(values.replace(",","") )
dOut.writeChars(Key.Enter+"")

这只是在每行末尾添加一个字符串Enter。但这不是按Enter键

我的代码:

val socket = new Socket(InetAddress.getByName("localhost"), 9090)
val dOut = new DataOutputStream(socket.getOutputStream())

// Just to pass the enter key I tried using scala.swing
import scala.swing.event.Key
 // values is just a string read from json to be sent over socket 
  stream.
  values = values.replace("\"","")
  try {
    println("trying to connect to socket sending values")
    println(values)
   dOut.writeUTF(values.replace(",","") )
    dOut.writeChars(Key.Enter)
    dOut.flush()
    Thread.sleep(1500)
  } catch {
    case e: IOException =>
      System.err.println(e)
  }

以下是从同一套接字读取的流媒体的代码:

val ssc = new StreamingContext(config,Seconds(3))
val data = ssc.socketTextStream("localhost",9090)
val words = data.flatMap(_.split(" ")).map(w => 
(w,1)).reduceByKey(_+_)
words.print()
ssc.start()
ssc.awaitTermination()

使用“ \ n”发送,但没有按Enter键,因此我的套接字流光无法读取此代码:

*133.3000 51609 133.2400 133.3150 133.2200 
+135.1355 264853 135.0900 135.1500 134.9700 
+131.7500 243357 131.8000 132.0400 131.7200 
+132.8800 121197 132.8000 132.8800 132.7700 

使用Key.Enter +“ \ n”和Key.Enter。(“ \ n”),其输出显示为:

136.0800 109158 136.0300 136.0900 135.9900 Enter
+137.1621 141391 137.2100 137.2200 137.1350 Enter

请帮助我将注释ket添加到Enter键,以发送到套接字流工作。 任何帮助将不胜感激。谢谢。

0 个答案:

没有答案