我正在尝试在使用此代码发送消息之后从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
1条答案
按热度按时间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