scala套接字客户端没有';将二进制数据发送到python服务器后无法获得响应

scala套接字客户端没有';将二进制数据发送到python服务器后无法获得响应,python,scala,sockets,base64,serversocket,Python,Scala,Sockets,Base64,Serversocket,我使用Scala套接字客户端将二进制数据发送到Python服务器。我发现Python套接字服务器无法从Scala客户端读取数据。我尝试在邮件尾部添加\r\n,但没有任何效果。以下是我的Scala客户端代码: val s = new Socket(InetAddress.getByName(SOCKET), 5000) s.setSoTimeout(120*1000) val inputStream = s.getInputStream() val bufferSource = new Buffe

我使用Scala套接字客户端将二进制数据发送到Python服务器。我发现Python套接字服务器无法从Scala客户端读取数据。我尝试在邮件尾部添加\r\n,但没有任何效果。以下是我的Scala客户端代码:

val s = new Socket(InetAddress.getByName(SOCKET), 5000)
s.setSoTimeout(120*1000)
val inputStream = s.getInputStream()
val bufferSource = new BufferedSource(inputStream)
val out = new PrintStream(s.getOutputStream())
lazy val in = bufferSource.getLines()
//send data to python server socket
theData:Array[Byte] = //The data comes from SparkStreaming, it's byte array.
out.println(theData)
out.flush()
if(in.hasNext){
   val json1 = in.next()
}
class TCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        while True:
            cur_thread = threading.current_thread()
            self.data = self.rfile.read()
            if not self.data:
                break
            output=calculate256(self.data)
            self.wfile.write(json.dumps(output)+'\n')
以下是我的Python服务器代码:

val s = new Socket(InetAddress.getByName(SOCKET), 5000)
s.setSoTimeout(120*1000)
val inputStream = s.getInputStream()
val bufferSource = new BufferedSource(inputStream)
val out = new PrintStream(s.getOutputStream())
lazy val in = bufferSource.getLines()
//send data to python server socket
theData:Array[Byte] = //The data comes from SparkStreaming, it's byte array.
out.println(theData)
out.flush()
if(in.hasNext){
   val json1 = in.next()
}
class TCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        while True:
            cur_thread = threading.current_thread()
            self.data = self.rfile.read()
            if not self.data:
                break
            output=calculate256(self.data)
            self.wfile.write(json.dumps(output)+'\n')

有趣的是,如果我用base64编码数据,并使用readline()而不是read()函数,那么它就可以工作了。但是我们必须传输二进制数据进行处理,所以readline()不适合我们。非常感谢您的帮助。

您能提供您的客户机和服务器的MWE(请参阅)吗?非常感谢您,我用更详细的代码修改了这个问题。问题是Python服务器端甚至无法从Scala客户端获取数据。因此,在Python端的read()函数之后没有进一步的操作。Scala和Python socket是否需要任何协议或指定的代码格式,但我使用Python客户端访问Python服务器是完全正确的。似乎我需要添加以下行:socket.shutdownOutput()您能提供您的客户端和服务器的MWE(请参阅)吗?非常感谢,我用更详细的代码修改了这个问题。问题是Python服务器端甚至无法从Scala客户端获取数据。因此,在Python端的read()函数之后没有进一步的操作。Scala和Python socket是否需要任何协议或指定的代码格式,但我使用Python客户端访问Python服务器完全没有问题