android从python服务器的socket接收消息

pftdvrlh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(611)

我正在尝试在使用此代码发送消息之后从python服务器获取消息
我在android上编写了这个代码,这样每当我点击这个按钮时,这个代码就会被激活并从一个新的客户端连接起来,python就会将消息发送回所有曾经登录过的参与者,并发送到新的客户端
如何从服务器接收消息?
我的代码:

class Send extends AsyncTask<String, Void, Void> {
    public Socket socket; // Create socket
    public PrintWriter printWriter; // Create print writer

    protected Void doInBackground(String... strings) {
        String command = strings[0]; // Set the command

        try {
            socket = new Socket("10.0.0.2", 13131); // Set socket connection
            printWriter = new PrintWriter(socket.getOutputStream()); // Set the print writer with socket properties

            printWriter.write(command); // Send the command to server
            printWriter.flush(); // Clear the line

            socket.close();

        }
        catch (UnknownHostException e) {e.printStackTrace();} // Error exception
        catch (IOException e) {e.printStackTrace();} // Error exception

        return null;
    }
}

我试过了

InputStream input = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line = reader.readLine();

        System.out.println(line);

我得到一个错误例外:

I/System.out: [socket] e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaUtils

我怎样才能收到这些信息?
我的python服务器:

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Set the socket
    server.bind((socket.gethostname(), 13131)) # Set socket properties

    server.listen()
    (client, (ipNum, portNum)) = server.accept() # Accept to new client

    print("Phone connected")

    while True:
        server.listen()
        (client, (ipNum, portNum)) = server.accept() # Accept to new clients (Accept to new command from the phone)

        Clients.append(client)

        message = str(client.recv(32).decode()) # Set the command as string

        if(message != ""): # Checks if a command has been sent
            print("Client: " + message) # Print the command

            Command(message.lower()) # Process the command

            for Client in Clients:
                Client.send(str(BackMessage).encode())
                Clients.remove(Client)

            print("Server: " + BackMessage) # Print the BackMessage

        else:
            for Client in Clients:
                Client.send(str(BackMessage).encode())
                Clients.remove(Client)

            time.sleep(0.05) # Sleep for 0.05 seconds
biswetbf

biswetbf1#

cta=中国型式认证,这是联发科为测试目的在android中添加的东西。
您的错误发生在drivermanager.getconnection()中,它可能使用了okhttp、apachehttp或android libcore中的socket类来执行请求。
mediatek修补了这些库以添加对http请求的控制。它试图动态加载在/system/framework/mediatek-cta.jar中定义的一些方法,但在您的android设备的文件系统中它可能不存在或不可访问。
我看到5种解决方案:
如果您使用的是自定义/根rom,请通过ota或adb remount添加适当的mediatek-cta.jar
使用具有相同应用程序源代码的另一个设备(基于非mediatek的设备不会有此问题)。
通过官方的ota更新升级操作系统,希望设备制造商能解决这个问题。
通过以下修改自行重建和定制操作系统
确保medatek cta已添加到产品包和产品启动罐中
删除libcore、okhttp和apachehttp中的钩子。
请与操作系统维护人员的支持人员联系。
如果它不能被1修复,那么剩下的第二个似乎很容易解决。因为它的操作系统和硬件相关的问题。
参考文献:https://stackoverflow.com/a/54985015/9416473

相关问题