WebSocket 无法连接到 Android 模拟器

websocket unable to connect to android emulator

本文关键字:Android 模拟器 连接 WebSocket      更新时间:2023-09-26

所以这是我非常简单的WebSocket代码的代码,用于连接到Android模拟器...它挂了。

我可以确认我可以远程登录到模拟器。我也可以Websocket到Web服务器,即使http给出了旧的"意外响应代码200"。我还可以确认读取状态是一个常数零。

我还可以确认在连接页面时建立连接,在删除页面时断开连接。

向上翻页时:

$ netstat -a | grep 5554
  TCP    127.0.0.1:5554         eww:0                  LISTENING
  TCP    127.0.0.1:5554         eww:49516              ESTABLISHED
  TCP    127.0.0.1:5554         eww:54424              ESTABLISHED
  TCP    127.0.0.1:49516        eww:5554               ESTABLISHED
  TCP    127.0.0.1:54424        eww:5554               ESTABLISHED

删除页面后:

$ netstat -a | grep 5554
  TCP    127.0.0.1:5554         eww:0                  LISTENING
  TCP    127.0.0.1:5554         eww:49516              ESTABLISHED
  TCP    127.0.0.1:49516        eww:5554               ESTABLISHED
  TCP    127.0.0.1:54424        eww:5554               TIME_WAIT

我正在使用Chrome,这一切都在Windows 7上运行。另一个连接可能是Eclipse。

有什么想法吗?

<!DOCTYPE html>
<html>
<head>
<title>Telnet to Android Emulator</title>
<style>
    #messages {
        list-style: none;
    }
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<h1>Telnet to Android Emulator</h1>
<ul id="messages">
</ul>
<script>
    $(document).ready(function() {
        function log(message) {
            $('#messages').append('<li>' + message + '</li>');
        }
        var socket;
        if ("WebSocket" in window) {
            log("WebSocket API supported");
        } else {
            log("WebSocket API not supported");
        }
        function wsOpen(e) {
            log("OPEN");
        }
        function wsClose(e) {
            log("CLOSED");
        }
        function wsError(e) {
            log("ERROR " + e.data);
        }
        function wsMessage(e) {
            log(e.data);
        }
        function openSocket() {
            var wsuri = "ws://localhost:5554";
            log("connecting to " + wsuri);
            try {   
                socket = new WebSocket(wsuri);
                socket.onopen = wsOpen;
                socket.onclose = wsClose;
                socket.onerror = wsError;
                socket.onmessage = wsMessage;
            } catch (exception) {
                log('Caught ' + exception);
            }               
        }
        function closeSocket() {
            log("disconnecting");
            socket.close();
        }
        openSocket(); // down here for testing
    });
</script>
</body>
</html>

WebSocket本身就是一个协议,Android模拟器不会说它。这就是为什么它没有连接或调用onopen函数的原因。

是时候制定新战略了

我通过编写一个 Java 小程序解决了这个问题,该小程序执行 telnet 连接,然后通过它从网页传递信息。在这种情况下,我使用谷歌地图上的点击来传递"地理修复"数据。

https://github.com/stevemarvell/GoogleMapToAndroidEmulator

这并不完美,但这是一个开始。