gpt4 book ai didi

java - Android从python服务器中的套接字接收消息

转载 作者:行者123 更新时间:2023-12-03 11:54:44 31 4
gpt4 key购买 nike

在使用此代码发送消息后,我试图从 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

最佳答案

CTA = China Type Approval,这是 Mediatek 在 Android 中添加的用于测试目的的内容。

您的错误发生在可能使用 okhttpapache-httpSocketDriverManager.getConnection() 中> Android 的 libcore 中的类来执行它的请求。

联发科修补了这些库以添加对 HTTP 请求的控制。它尝试动态加载 /system/framework/mediatek-cta.jar 中定义的某些方法,但它可能不存在或无法在您的 Android 设备的文件系统上访问。

我看到 5 个解决方案:

  1. 通过 OTA 添加适当的 mediatek-cta.jar 或通过 adb remount(如果您使用的是自定义/root ROM)
  2. 使用具有相同应用程序源代码的另一台设备(非基于 Mediatek 的设备不会出现该问题)。
  3. 正在通过官方 OTA 更新升级您的操作系统,希望设备制造商解决该问题。
  4. 自行重建和定制操作系统,并进行以下修改
  • 确保将 medatek-cta 添加到 PRODUCT_PACKAGESPRODUCT_BOOT_JARS
  • 删除 libcore、okhttp 和 apache-http 中的钩子(Hook)。
  1. 联系您的操作系统维护人员的支持

如果它不能通过 1 修复,那么第二个似乎是简单的解决方案。由于其操作系统和硬件相关问题。

引用:https://stackoverflow.com/a/54985015/9416473

关于java - Android从python服务器中的套接字接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65220054/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com