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