【问题标题】:i want to receive string from python server我想从 python 服务器接收字符串
【发布时间】:2020-09-25 09:21:23
【问题描述】:

我正在使用 android 和 Python 制作应用程序。 安卓是客户端 python是服务器 我将图像文件发送到 python 并希望从服务器接收字符串 但没有字符串来自服务器。 socketIn.readLine() 这部分不起作用。

try { // 소켓을 생성하고 입출력 스트립을 소켓에 연결
            clientSocket = Socket(ip , port)
            Log.d("Socket>>>>>>", "ip and port open Success!!!!!")
            //val inputStream = clientSocket.getInputStream()
            val tempfile = file

            try{
                socketIn = BufferedReader(InputStreamReader(clientSocket.getInputStream(), "UTF-8"))
                //socketOut = PrintWriter(BufferedWriter(OutputStreamWriter(clientSocket.getOutputStream())),true)
                dis = DataInputStream(FileInputStream(tempfile))
                dos = DataOutputStream(clientSocket.getOutputStream())
                val buf = ByteArray(1024)
                var read_length : Int = 0

                do {
                    read_length = dis.read(buf)
                    if(read_length == -1)
                        break
                    dos.write(buf)
                    dos.flush()
                } while(read_length > 0)

                var line : String?
                var StringBuilder = StringBuilder()


                do {
                   line = socketIn.readLine()

                   if(line == null)
                       break
                   StringBuilder.append(line)
                }while(line != null)

                onApiResult(line)

            } catch (e : Exception){
                Log.d("error", "${e}")
                onApiFailed()
            } finally {
                clientSocket.close()
            }

这是我的安卓客户端代码。客户端使用 tcp 将图像发送到 python 服务器。 图像发送良好,但字符串未发送。 这里有一个错误 line = socketIn.readLine() 请告诉我如何解决它

from socket import *

serverPort = 8000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('123.234.345.456', serverPort))
serverSocket.listen(1)
print('The server is ready to receive')
msg = "hi"
while True:
    connectionSocket, addr = serverSocket.accept()

    img_file = open('hi.jpg', "wb")

    while True:
        sentence = connectionSocket.recv(1024)
        data = sentence
        img_file.write(sentence)
        if sentence:
            print("recving IMg....")
            print(sentence)
            sentence = connectionSocket.recv(1024)
            img_file.write(sentence)

        else:
            print('Done')
            img_file.close()
            break

    connectionSocket.sendall(bytes(msg, 'UTF-8'))


connectionSocket.close()

【问题讨论】:

  • 如果你使用 readLine() 服务器应该发送一个它现在不发送的行。将 msg = "hi" 更改为 msg = "hi\n"。

标签: python android sockets


【解决方案1】:

只是一个猜测——您正在发送二进制数据,但您的客户端代码使用 java Reader/Writer 类(专用于读取类似文本的数据)。使用 Streams,而不是 Reader/Writer。读取二进制数据时没有“endOfLine”的概念。另请注意,客户端对“readLine()”的调用假定客户端平台依赖于行尾,无论它可能是什么。如果服务器和客户端平台不同,它将永远无法工作。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2012-06-20
    • 2014-07-31
    相关资源
    最近更新 更多