簡體   English   中英

websocket無法連接到Android模擬器

[英]websocket unable to connect to android emulator

因此,這是我非常簡單的WebSocket代碼的代碼,該代碼可連接到Android仿真器...並且掛起。

我可以確認我可以遠程登錄到仿真器。 即使http給出了舊的“意外響應代碼200”,我也可以通過Websocket連接到Web服務器。 我還可以確認readState為常數零。

我還可以確認在連接頁面時建立了連接,而在刪除頁面時斷開了連接。

向上翻頁:

$ 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 Applet解決了這個問題,該Java Applet建立了telnet連接,然后通過它傳遞了來自網頁的信息。 在這種情況下,我使用了Google Maps上的點擊來傳遞“地理位置修正”數據。

https://github.com/stevemarvell/GoogleMapToAndroidEmulator

這不是完美的,但這是一個開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM