Using WebSockets on Samsung Smart TV

2019-06-07 05:36发布

My requirement is to have a listening socket in my Samsung Smart TV app, in order to receive events from a device in the same local network.

I've been searching the web for methods to do that and I came across terms like Node.js, Socket.io, websocket. Even though i understand these terms in terms of web development (I think), I am unable to picture a method to open a listening socket in my Samsung Smart Tv App.

Just for the sake of playing around I wrote a TCP Server code on iOS using GCD Async Sockets and thought of connecting it to the smart tv and send a welcome message. This is the code on my smart tv -

//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);
  }

I have a button and I'm calling webSocketObj.init() on the button click.

Logs of my didReadData of the server :

Client says : GET / HTTP/1.1

Log from SmartTv :

 [JS ALERT]:  Scenewebsocket.handleKeyDown(29443)
 [JS ERROR]:
File:           file://
Line No:        0
Error Detail:   
 [JS ALERT]:  SOCKET HELPER SAYS : DISCONNECTED

ALSO I tried echoing the message back to the Smart Tv from the server. And this time i got the logs

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

I know i'm doing something horribly wrong...what is it? Pls help.

2条回答
劫难
2楼-- · 2019-06-07 06:23

Have you tried socket.io server and client libraries?

We have socket.io server on node.js, and TV can connect to it using socket.io-client library. On 2012 TV it uses websocket. On 2011 TV it uses XHR fallback.

查看更多
\"骚年 ilove
3楼-- · 2019-06-07 06:31

You can use socket.io library to make it easier for yourself to use WebSockets.

You would include a web browser version of socket.io in the samsung tv like this:

<script src="http://*some ip address*/socket.io/socket.io.js"></script>

Where some ip address is the ip address of a nodejs server that you control.

On your server you would need to install NodeJS with the socket.io server version.

查看更多
登录 后发表回答