java—通过套接字传输数据的问题

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

我决定用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设备的文件系统中它可能不存在或不可访问。
因此,我的设备不能与套接字一起工作吗?如果没有,您还可以如何在设备(文本、音乐、在线广播)之间传输数据?如果你能回答我,我将不胜感激
(我用谷歌翻译,对不起我的英语)

esbemjvw

esbemjvw1#

一切都变得非常简单:事实是,我连接到一台服务器(电脑),它通过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上的联发科试图找到一个类有关,但它不在设备的文件系统中。这不会影响工作。如何通过任何连接连接到计算机还有待了解

相关问题