0

这些问题可能听起来很傻,但我对这个网络事物很陌生。我已经尝试了好几天来实现一个与 Twisted 服务器一起工作的客户端,但是我没有从服务器得到任何响应。我已经阅读了很多文档并观看了一些教程,并且我修复了一些内容并更好地理解了一些概念。

在我继续提出任何问题之前,我想先向您展示我的代码。这是我用来与基于 Twisted 的服务器对话的内容:

        val socketfactory: SocketFactory = SocketFactory.getDefault()
        val socket = socketfactory.createSocket(host, port)
        socket.keepAlive = true
        socket.tcpNoDelay = true
        val isSocketConnected = socket.isConnected //this checks socket's connectivity
        val dOut = DataOutputStream(socket.getOutputStream())
        val dIn = DataInputStream(socket.getInputStream())
        
        val teststring = "Hi server!"
        dOut.writeUTF(teststring)
        Log.d("MILESTONE", "MESSAGE SENT AT THIS POINT, Socket is connected ?: $isSocketConnected")
        
        var testreader = ""
        while (true) {
            testreader = dIn.readUTF()
            Log.d("READING:", "RECEIVED THIS: $testreader")
        }
        

我的代码似乎永远不会到达第二个“Log”行。它永远不会到达那里。我认为那是因为我从未从服务器获得任何输入。这让我很困惑。因为“socket.isConnected”返回 true。这是否意味着客户端(我)和服务器之间存在持续的连接?但是当我发送任何输出时,服务器不会回话。

所以我的问题是: 1-我做错了吗?为什么我没有收到来自服务器的对话并且它阻止了代码?2- SocketFactory 是否必要?3-是否有任何库可以通过 Java 与 Twisted 通信?

提前致谢 !

4

1 回答 1

0

对于每个努力与 Twisted 运行的 python 服务器进行通信的人来说,我提供了有史以来最好的解决方案!在检查了 Twisted 的开源代码后,我意识到它有一个“LineReceiver”类,它只在线路完成时才响应消息。换句话说,您可以永远发送数据,并且在您完成一行并开始新的一行之前,它永远不会响应。当使用分隔符时,Twisted 会知道该行已经结束。(它是在服务器端配置的)。大多数运行 Twisted 的服务器将使用行分隔符:“\r\n”

这就是棘手的事情!一旦你发送了那个小字符串,它就会开始回复你。这是一个例子:

      val dOut = DataOutputStream(socket.getOutputStream()) //This is my favorite way of sending data!
      val dIn = socket.getInputStream().bufferedReader(Charsets.UTF_8) //This is my favorite way of reading data ! 
      val teststring = "hi server! \r\n" //This is the tricky part !

就是这样 !之后你要做的就是从 bufferedReader 中读取行,就像这样!

var testreader: List<String>
        while (true) {
            testreader = dIn.bufferedReader(Charsets.UTF_8).readLines()
            for (line in testreader)
                Log.e("MILESTONE", line)

        }

在我开始阅读输入后,我发现服务器实际上开始向我发送字符串并与我进行通信。我希望每个人都能让他们的代码在这个或任何其他事情上工作!

于 2021-09-18T02:04:36.597 回答