Comunicaciones de red

Las Apps de Chrome pueden actuar como cliente de red para conexiones TCP y UDP. En este documento, se muestra cómo usar TCP y UDP para enviar y recibir datos a través de la red Para obtener más información, consulta la documentación de Sockets APIs de UDP, Sockets TCP y Sockets TCP Server.

Requisitos del manifiesto

Para las Apps de Chrome que usan TCP o UDP, agrega la entrada sockets al manifiesto y especifica la IP. reglas de permisos de extremos. Por ejemplo:

"sockets": {
    "udp": {
      "send": ["host-pattern1", ...],
      "bind": ["host-pattern2", ...],
      ...
    },
    "tcp" : {
      "connect": ["host-pattern1", ...],
      ...
    },
    "tcpServer" : {
      "listen": ["host-pattern1", ...],
      ...
    }
  }

La sintaxis del socket “host-pattern” entradas de video sigue estas reglas:

<host-pattern> := <host> | ':' <port> | <host> ':' <port>
<host> := '*' | '*.' <anychar except '/' and '*'>+
<port> := '*' | <port number between 1 and 65535>)

Consulta Clave de manifiesto de sockets para obtener una descripción detallada de la sintaxis.

Ejemplos de entradas de manifiesto de socket:

  • { "tcp": { "connect" : "*:23" } }: conexión en el puerto 23 de cualquier host
  • { "tcp": { "connect" : ["*:23", "*:80"] } }: conexión en el puerto 23 u 80 de cualquier host
  • { "tcp": { "connect" : "www.example.com:23" } }: puerto de conexión 23 de www.example.com
  • { "tcp": { "connect" : "" } }: conexión de cualquier puerto de cualquier host
  • { "udp": { "send" : ":99" } } envía el paquete UDP al puerto 99 de cualquier host
  • { "udp": { "bind" : ":8899" } }: vincula el puerto local 8899 para recibir paquetes UDP
  • { "tcpServer": { "listen" : ":8080" } }: TCP escucha en el puerto local 8080

Usa TCP

Las Apps de Chrome pueden realizar conexiones a cualquier servicio que admita TCP.

Conexión a un tomacorriente

A continuación, se muestra un ejemplo de cómo conectar (sockets.tcp.connect) a un socket:

chrome.sockets.tcp.create({}, function(createInfo) {
  chrome.sockets.tcp.connect(createInfo.socketId,
    IP, PORT, onConnectedCallback);
});

Mantén un identificador para socketId de modo que más adelante puedas recibir y enviar datos (sockets.tcp.send) para este socket.

Recibe y envía a un socket

La recepción de (sockets.tcp.onReceive) y el envío a un socket usa objetos ArrayBuffer. Para para obtener más información sobre ArrayBuffers, consulta la descripción general, los arrays escritos en JavaScript y el instructivo. Cómo convertir ArrayBuffer en y desde String.

chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);
chrome.sockets.tcp.onReceive.addListener(function(info) {
  if (info.socketId != socketId)
    return;
  // info.data is an arrayBuffer.
});

Desconectarse de un enchufe

A continuación, te indicamos cómo desconectarlo (sockets.tcp.disconnect):

chrome.sockets.tcp.disconnect(socketId);

Usa UDP

Las Apps de Chrome pueden realizar conexiones a cualquier servicio que admita UDP.

Enviando datos

En el siguiente ejemplo, se muestra cómo enviar datos (sockets.udp.send) a través de la red mediante UDP:

// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
  // The socket is created, now we can send some data
  var socketId = socketInfo.socketId;
  chrome.sockets.udp.send(socketId, arrayBuffer,
    '127.0.0.1', 1337, function(sendInfo) {
      console.log("sent " + sendInfo.bytesSent);
  });
});

Recibir datos

Este ejemplo es muy similar al caso de “Cómo enviar datos” ejemplo, excepto que configuramos un controlador de eventos para la recepción de datos.

var socketId;

// Handle the "onReceive" event.
var onReceive = function(info) {
  if (info.socketId !== socketId)
    return;
  console.log(info.data);
};

// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
  socketId = socketInfo.socketId;
  // Setup event handler and bind socket.
  chrome.sockets.udp.onReceive.addListener(onReceive);
  chrome.sockets.udp.bind(socketId,
    "0.0.0.0", 0, function(result) {
      if (result < 0) {
        console.log("Error binding socket.");
        return;
      }
      chrome.sockets.udp.send(socketId, arrayBuffer,
        '127.0.0.1', 1337, function(sendInfo) {
          console.log("sent " + sendInfo.bytesSent);
      });
  });
});

Usa el servidor TCP

Las Apps de Chrome pueden actuar como servidores TCP con la API sockets.tcpServer.

Crea un socket de servidor TCP

Crea un socket de servidor TCP con sockets.tcpServer.create.

chrome.sockets.tcpServer.create({}, function(createInfo) {
  listenAndAccept(createInfo.socketId);
});

Acepta conexiones de clientes

En el siguiente ejemplo, se muestra cómo aceptar conexiones (sockets.tcpServer.listen) en un servidor TCP socket:

function listenAndAccept(socketId) {
  chrome.sockets.tcpServer.listen(socketId,
    IP, PORT, function(resultCode) {
      onListenCallback(socketId, resultCode)
  });
}

Controla el socketId para que luego puedas aceptar nuevas conexiones (sockets.tcpServer.onAccept) .

var serverSocketId;
function onListenCallback(socketId, resultCode) {
  if (resultCode < 0) {
    console.log("Error listening:" +
      chrome.runtime.lastError.message);
    return;
  }
  serverSocketId = socketId;
  chrome.sockets.tcpServer.onAccept.addListener(onAccept)
}

Cuando se establece una conexión nueva, se invoca onAccept con el clientSocketId del TCP nuevo. conexión. El ID de socket de cliente se debe usar con la API de sockets.tcp. El socket del nuevo conexión está pausada de forma predeterminada. Reanúdalo con sockets.tcp.setPaused para comenzar de datos no estructurados.

function onAccept(info) {
  if (info.socketId != serverSocketId)
    return;

  // A new TCP connection has been established.
  chrome.sockets.tcp.send(info.clientSocketId, data,
    function(resultCode) {
      console.log("Data sent to new TCP client connection.")
  });
  // Start receiving data.
  chrome.sockets.tcp.onReceive.addListener(function(recvInfo) {
    if (recvInfo.socketId != info.clientSocketId)
      return;
    // recvInfo.data is an arrayBuffer.
  });
  chrome.sockets.tcp.setPaused(false);
}

Deja de aceptar conexiones de clientes

Llama a sockets.tcp.disconnect en el ID de socket de servidor para dejar de aceptar conexiones nuevas.

chrome.sockets.tcpServer.onAccept.removeListener(onAccept);
chrome.sockets.tcpServer.disconnect(serverSocketId);