【问题标题】:Problems with transferring data over sockets通过套接字传输数据的问题
【发布时间】: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系统本身造成的。

标签: java android sockets


【解决方案1】:

一切都变得非常简单:事实上,我连接到一台服务器(计算机),该服务器通过 Wi-Fi 访问互联网,使用我的 Android 设备上的移动网络,什么也没发生。但是当我将手机连接到 Wi-Fi 网络时,一切正常。我是怎么想出来的

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

不是错误,而是与 Android 上的 Mediatek 正在尝试查找类但它不在设备的文件系统中的事实相关的警告。而这并不影响工作。还有待了解如何通过任何连接方式连接到计算机

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多