私の要件は、同じローカル ネットワーク内のデバイスからイベントを受信するために、Samsung Smart TV アプリにリッスン ソケットを用意することです。
私はそれを行う方法をウェブで検索しており、Node.js、Socket.io、websocketなどの用語に出くわしました。Web 開発の観点からこれらの用語を理解していても (私は思う)、Samsung Smart TV アプリでリッスン ソケットを開く方法を想像できません。
遊んでみるために、GCD Async Socketsを使用して iOS で TCP サーバー コードを作成し、それをスマート テレビに接続してウェルカム メッセージを送信することを考えました。これは私のスマートテレビのコードです -
//var wsUri = "wss://echo.websocket.org/";
var wsUri = "ws://192.168.1.116:9898/";
//var output;
var webSocketObj={};
webSocketObj.init = function()
{
//output = document.getElementById("output");
this.testWebSocket();
};
webSocketObj.testWebSocket = function()
{
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { onOpen(evt); };
websocket.onclose = function(evt) { onClose(evt); };
websocket.onmessage = function(evt) { onMessage(evt); };
websocket.onerror = function(evt) { onError(evt); };
};
function onOpen(evt)
{
writeToScreen("CONNECTED");
doSend("WebSocket rocks");
}
function onClose(evt)
{
writeToScreen("DISCONNECTED");
}
function onMessage(evt)
{
writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
websocket.close();
}
function onError(evt)
{
writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}
function doSend(message)
{
writeToScreen("SENT: " + message);
websocket.send(message);
}
function writeToScreen(message)
{
/* var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
output.appendChild(pre);*/
alert('SOCKET HELPER SAYS : '+message);
}
ボタンがあり、ボタンのクリック時に webSocketObj.init() を呼び出しています。
didReadData
サーバーのログ:
クライアントは言う: GET / HTTP/1.1
SmartTv からのログ:
[JS ALERT]: Scenewebsocket.handleKeyDown(29443)
[JS ERROR]:
File: file://
Line No: 0
Error Detail:
[JS ALERT]: SOCKET HELPER SAYS : DISCONNECTED
また、サーバーからスマートテレビにメッセージをエコーバックしようとしました。そして今回はログを取得しました
Client says : GET / HTTP/1.1
Client says : Upgrade: WebSocket
Client says : Connection: Upgrade
Client says : Host: 192.168.1.116:9898
Client says : Origin: file://
Client says : Sec-WebSocket-Key1: 1504l73 8Ew/J 4 ,L7W6
Client says : Sec-WebSocket-Key2: TK2 81d A64Bo7 118 0
私は何かひどく間違ったことをしていることを知っています...それは何ですか? 助けてください。