【发布时间】:2020-12-09 09:10:03
【问题描述】:
我决定学习 Java 网络编程,并从套接字开始。首先,我决定创建一个 Android 聊天客户端,您可以在其中实时聊天,数据通过套接字传输。为了理解原理,一开始我只是简单地重写了最简单的客户端-服务器连接的代码。但是,当尝试连接到服务器(Android 设备 - 客户端,计算机 - 服务器)时,会抛出 ClassNotFoundException:
I/System.out: [socket]:check permission begin!
W/System: ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
I/System.out: [socket] e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaUtils
我在清单中获得了连接到 Internet 的权限,我在单独的线程中创建了一个连接。
客户端代码:
try {
InetAddress addr = InetAddress.getByName("26.242.96.221");
Socket socket = new Socket(addr, 8080);
System.out.println("socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
for (int i = 0; i < 10; i++) {
out.println("howdy " + i);
String str = in.readLine();
System.out.println(str);
}
out.println("END");
}catch (Exception e){
e.printStackTrace();
}
服务器代码:
public class Server {
public static final int PORT = 8080;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(PORT);
System.out.println("Started: " + s);
try {
Socket socket = s.accept();
try {
System.out.println("Connection accepted: " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
while (true) {
String str = in.readLine();
if (str.equals("END"))
break;
System.out.println("Echoing: " + str);
out.println(str);
}
}
finally {
System.out.println("closing...");
socket.close();
}
}
finally {
s.close();
}
}
}
我找到了这个答案:
Mediatek 修补了这些库以添加对 HTTP 请求的控制。它会尝试动态加载 /system/framework/mediatek-cta.jar 中定义的一些方法,但它可能在您的 android 设备的文件系统上不存在或无法访问。
因此,我的设备不能使用套接字吗?如果没有,您还能如何在设备之间传输数据(文本、音乐、在线广播)?非常感谢您的回答
(我用谷歌翻译,对不起我的英语)
【问题讨论】:
-
取消 getByName() 并使用 new Socket('26.242.96.221" , 8080); 启动您的套接字;该 ip 是...?它是本地 ip 吗?
-
哪个语句导致类未找到异常?当然你可以在你的安卓应用中使用套接字。
-
@blackapps,这是我从安卓设备访问的电脑的ip
-
@blackapps,这些异常是Android系统本身造成的。