Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Chromecast连接到本地Android服务器?_Javascript_Android_Sockets_Server_Chromecast - Fatal编程技术网

Javascript 如何从Chromecast连接到本地Android服务器?

Javascript 如何从Chromecast连接到本地Android服务器?,javascript,android,sockets,server,chromecast,Javascript,Android,Sockets,Server,Chromecast,我想做的是在我的Android设备上启动一个本地服务器,然后从Chromecast连接到Android服务器,这样我就可以将图像数据从Android发送到Chromecast 到目前为止,我所做的是在Android上设置一个绑定到127.0.0.1的ServerSocket,然后在消息中向chromecast发送本地主机信息端口号,该消息告诉它ServerSocket已准备好接受连接,并指示chromecast连接到服务器。但我不知道我应该如何连接到它。我曾尝试使用WebSocket连接到Ser

我想做的是在我的Android设备上启动一个本地服务器,然后从Chromecast连接到Android服务器,这样我就可以将图像数据从Android发送到Chromecast

到目前为止,我所做的是在Android上设置一个绑定到127.0.0.1的ServerSocket,然后在消息中向chromecast发送本地主机信息端口号,该消息告诉它ServerSocket已准备好接受连接,并指示chromecast连接到服务器。但我不知道我应该如何连接到它。我曾尝试使用WebSocket连接到ServerSocket,但我发现

WebSocket connection to 'ws://localhost:9147/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
我更改了端口号,尝试了ws和wss,并尝试了搜索答案,但我遇到的所有问题都是如何将android连接到服务器,或者如何将android服务器连接到android客户端,因此如果这是一个重新发布,我会表示歉意

我计划做的是使用Base64图像编码向chromecast发送一个包含图像数据的字符串,然后将图像src设置为该值。很明显,我不想使用Cast.CastAPI.sendMessage执行此操作

为了清楚起见,我正在寻找一种使用JavaScript连接到Android服务器的方法

Android代码运行正常,Chromecast收到消息,但当它尝试连接时失败

Android代码:

 Runnable bitmapSender = new Runnable() {
    private ServerSocket serverSocket;
    public static final int SERVERPORT = 9147;


    @Override
    public void run() {
        Socket socket = null;
        try {
            Log.d(TAG, "Socket binding attempt");
            serverSocket = new ServerSocket();
            serverSocket.setReuseAddress(true);
            serverSocket.bind(new InetSocketAddress(SERVERPORT));


            String message = createJsonMessage(MessageType.socket, "wss://localhost:"+ SERVERPORT);

            sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }


        while (!Thread.currentThread().isInterrupted()) {
            try {
                Log.d(TAG, "Socket thread");
                socket = serverSocket.accept();
                CommunicationThread commThread = new CommunicationThread(socket);
                BitmapExecutorService.execute(commThread);

              }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
};
Javascript:

    function connectToSocket(source){
     //Connect to socket

        window.socket = new WebSocket(source);
        socket.onopen = function() {
            socket.send('Hello Android');
        };
        window.socket.onmessage = function(event) {
            console.log('Received a message from the server!', data);
            var jsonObj = JSON.parse(event.data)
            if(jsonObj.type == "image"){
                console.log('Image sent :)');
                var source = 'data:image/png;base64,'.concat(jsonObj.data)
                displayEncodedImage(source);
            }
        };
谢谢

编辑:更新 我试图通过本地主机连接。这不像我想象的那样有效。我仍然没有让图像发送工作,但我现在有了握手。我需要做的是发送电话的IP地址。为此,我向清单中添加了ACCESS_WIFI_STATE权限,并使用以下代码获取IP地址:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
                String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

我建议不要像Socket那样低级,而只是在应用程序中添加一个小型web服务器,然后像往常一样向接收方提供内容;您可以在github和其他地方找到一些小型嵌入式开源web服务器添加到您的应用程序中,或者你可以写一个简单的,因为你真的不需要太多的功能。有了一个嵌入式web服务器,我可以向它写文件吗/你知道这是否有一个显著的速度权衡吗?我问,因为我几乎完成了连接的握手,如果可以考虑在性能上更好的话,我很乐意在这里完成它内存使用率/性能我不知道你所说的写入是什么意思。实际上没有速度上的折衷,而且效果非常好。我的意思是我如何像往常一样提供内容。我是否应该使用输出流将位图文件写入web服务器上的某个位置,然后向chromecast发送指向已保存图像的链接?谢谢