2012-09-13 113 views
58

Tengo una aplicación vb.net que abre un socket y lo escucha.Conexión al Socket TCP desde el navegador usando Javascript

Necesito comunicarme a través de este socket a esa aplicación utilizando un javascript que se ejecuta en un navegador. Es necesario enviar algunos datos en este socket para que la aplicación que está escuchando en este socket pueda tomar esa información, hacer algunas cosas con algunas llamadas remotas y obtener más datos y volver a ponerlo en el socket que mi javascript necesita léalo e imprímalo en el navegador.

Ive tried, socket.io, websockify pero ninguno ha demostrado ser útil.

De ahí la pregunta, ¿es lo que intento incluso posible? ¿Hay alguna manera de que un javascript que se ejecuta en un navegador se pueda conectar a un zócalo tcp y enviar algunos datos y escuchar en él para obtener más respuesta de datos en el zócalo e imprimirlo en el navegador?

Si esto es posible, puede alguien señalarme en la dirección correcta que me ayudaría a establecer el objetivo.

+1

No, se limitan a WebSockets – Bergi

+1

@Bergi - HTTP es un protocolo sobre TCP, así que por qué se puede hacer una conexión HTTP pero no TCP? –

+0

@kilaka: Porque las API (estándar) disponibles en un entorno de navegador [están limitadas a esas] (http://stackoverflow.com/q/10902256/1048572). – Bergi

Respuesta

19

Puede utilizar HTML5 Web Sockets:

var connection = new WebSocket('ws://IPAddress:Port'); 

connection.onopen = function() { 
    connection.send('Ping'); // Send the message 'Ping' to the server 
}; 

http://www.html5rocks.com/en/tutorials/websockets/basics/

su servidor también debe estar escuchando con un servidor de WebSocket como pywebsocket, alternativamente, usted puede escribir su propia tal como se indica en Mozilla

Adicional:

Actualización: Desde el Proyecto de W3C de enero de 2016:

Esto será posible a través de la interfaz del navegador como se muestra a continuación:

http://raw-sockets.sysapps.org/#interface-tcpsocket

https://www.w3.org/TR/tcp-udp-sockets/

navigator.tcpPermission.requestPermission({remoteAddress:"127.0.0.1", remotePort:6789}).then(
() => { 
    // Permission was granted 
    // Create a new TCP client socket and connect to remote host 
    var mySocket = new TCPSocket("127.0.0.1", 6789); 

    // Send data to server 
    mySocket.writeable.write("Hello World").then(
     () => { 

      // Data sent sucessfully, wait for response 
      console.log("Data has been sent to server"); 
      mySocket.readable.getReader().read().then(
       ({ value, done }) => { 
        if (!done) { 
         // Response received, log it: 
         console.log("Data received from server:" + value); 
        } 

        // Close the TCP connection 
        mySocket.close(); 
       } 
      ); 
     }, 
     e => console.error("Sending error: ", e); 
    ); 
+22

Para elaborar un poco más sobre esta respuesta: el servidor también debe estar escuchando con un servidor WebSocket. WebSockets no se puede conectar directamente a un socket TCP sin procesar. websockify es una herramienta que actúa como proxy WebSocket-to-TCP: se sienta en su servidor y escucha las conexiones WebSocket, y luego reenvía la comunicación WebSocket hacia y desde un socket TCP específico. – apsillers

+24

Esto ** no responde la pregunta ** - websocket es un protocolo sobre TCP (como HTTP, por ejemplo) y no una comunicación TCP directa. –

+0

, pero ¿cómo poner el mensaje en la ventana del navegador? :( – shzyincu

0

La solución que verdaderamente estas buscando es web sockets. Sin embargo, el proyecto Chrome ha desarrollado algunas nuevas tecnologías que son conexiones TCP directas TCP chromium

31

En cuanto a su problema, actualmente tendrá que depender de XHR o websockets para esto.

Actualmente ningún navegador popular ha implementado ninguna aplicación de sockets sin formato para JavaScript que le permita crear y acceder a sockets sin formato, pero un borrador para la implementación de la API de sockets sin procesar está en proceso. Echar un vistazo a estos enlaces:
http://www.w3.org/TR/raw-sockets/
https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket

Chrome ahora tiene soporte para TCP prima y sockets UDP en su API ‘experimentales’. Estas características solo están disponibles para las extensiones y, aunque están documentadas, están ocultas por el momento. Una vez dicho esto, algunos desarrolladores ya están creando proyectos interesantes para usarlo, como this IRC client.

Para acceder a esta API, deberá habilitar el indicador experimental en el manifiesto de su extensión.Usar sockets es bastante sencillo, por ejemplo:

chrome.experimental.socket.create('tcp', '127.0.0.1', 8080, function(socketInfo) { 
    chrome.experimental.socket.connect(socketInfo.socketId, function (result) { 
     chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");   
    }); 
}); 
+0

¿Qué navegadores son compatibles con sockets sin formato? –

+0

w3 raw socket impl: https://github.com/whiteout-io/tcp-socket – Rondo

+1

Cualquier rendimiento aumenta en comparación con Websockets y Rawsockets? –

3

Ver jsocket. No lo he usado yo mismo. Hace más de 3 años desde la última actualización (hasta el 26/6/2014).

* Utiliza Flash :(

Desde el documentation:

<script type='text/javascript'> 
    // Host we are connecting to 
    var host = 'localhost'; 
    // Port we are connecting on 
    var port = 3000; 

    var socket = new jSocket(); 

    // When the socket is added the to document 
    socket.onReady = function(){ 
      socket.connect(host, port);    
    } 

    // Connection attempt finished 
    socket.onConnect = function(success, msg){ 
      if(success){ 
        // Send something to the socket 
        socket.write('Hello world');    
      }else{ 
        alert('Connection to the server could not be estabilished: ' + msg);    
      }  
    } 
    socket.onData = function(data){ 
      alert('Received from socket: '+data); 
    } 

    // Setup our socket in the div with the id="socket" 
    socket.setup('mySocket');  
</script> 
0

ws2s proyecto está destinado a llevar a tubo para js del lado del navegador Es un servidor de WebSocket que transforman WebSocket a la toma

..

ws2s diagrama esquemático

enter image description here

muestra

código:

var socket = new WS2S("wss://feling.io/ws2s-server/").newSocket() 

socket.onReady =() => { 
    socket.connect("feling.io", 80) 
    socket.send("GET/HTTP/1.1\r\nHost: feling.io\r\nConnection: close\r\n\r\n") 
} 

socket.onRecv = (data) => { 
    console.log('onRecv', data) 
} 
Cuestiones relacionadas