Os apps do Chrome podem atuar como um cliente de rede para conexões TCP e UDP. Este documento mostra como usar TCP e UDP para enviar e receber dados pela rede. Para mais informações, consulte a seção Soquetes UDP, TCP de soquetes e Servidor TCP de soquetes.
Requisitos do manifesto
Para apps do Chrome que usam TCP ou UDP, adicione a entrada soquetes ao manifesto e especifique o IP regras de permissão de endpoint. Exemplo:
"sockets": {
"udp": {
"send": ["host-pattern1", ...],
"bind": ["host-pattern2", ...],
...
},
"tcp" : {
"connect": ["host-pattern1", ...],
...
},
"tcpServer" : {
"listen": ["host-pattern1", ...],
...
}
}
A sintaxe do soquete "host-pattern" de entrada segue estas regras:
<host-pattern> := <host> | ':' <port> | <host> ':' <port>
<host> := '*' | '*.' <anychar except '/' and '*'>+
<port> := '*' | <port number between 1 and 65535>)
Consulte Chave do manifesto de soquetes para ver uma descrição detalhada da sintaxe.
Exemplos de entradas do manifesto de soquete:
{ "tcp": { "connect" : "*:23" } }
: conexão na porta 23 de qualquer host{ "tcp": { "connect" : ["*:23", "*:80"] } }
: conexão na porta 23 ou 80 de qualquer host{ "tcp": { "connect" : "www.example.com:23" } }
: porta de conexão 23 de www.example.com{ "tcp": { "connect" : "" } }
: conectando qualquer porta de qualquer host.{ "udp": { "send" : ":99" } }
: envio de pacote UDP para a porta 99 de qualquer host{ "udp": { "bind" : ":8899" } }
: vincula a porta local 8899 para receber pacotes UDP.{ "tcpServer": { "listen" : ":8080" } }
: detecção de TCP na porta local 8080
Como usar TCP
Os Aplicativos do Google Chrome podem fazer conexões com qualquer serviço compatível com TCP.
Como se conectar a um soquete
Veja um exemplo de como se conectar (sockets.tcp.connect) a um soquete:
chrome.sockets.tcp.create({}, function(createInfo) {
chrome.sockets.tcp.connect(createInfo.socketId,
IP, PORT, onConnectedCallback);
});
Mantenha um identificador no socketId
para receber e enviar dados mais tarde
(sockets.tcp.send) a esse soquete.
Como receber e enviar para um soquete
Receber de (sockets.tcp.onReceive) e enviar a um soquete usa objetos ArrayBuffer. Para aprender sobre ArrayBuffers, confira a visão geral, as matrizes tipadas em JavaScript e o tutorial, Como converter o ArrayBuffer para e da 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.
});
Desconectar-se de um soquete
Veja como se desconectar (sockets.tcp.disconnect):
chrome.sockets.tcp.disconnect(socketId);
Como usar UDP
Os apps do Chrome podem fazer conexões com qualquer serviço compatível com UDP.
Envio de dados
Este é um exemplo de como enviar dados (sockets.udp.send) pela rede usando 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);
});
});
Recebimento de dados
Esse exemplo é muito semelhante ao método "Enviar dados" com a exceção de que configuramos um manipulador de eventos receber dados.
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);
});
});
});
Como usar o servidor TCP
Os apps do Chrome podem atuar como servidores TCP usando a API sockets.tcpServer.
Como criar um soquete de servidor TCP
Crie um soquete de servidor TCP com sockets.tcpServer.create.
chrome.sockets.tcpServer.create({}, function(createInfo) {
listenAndAccept(createInfo.socketId);
});
Como aceitar conexões de clientes
Veja um exemplo de como aceitar conexões (sockets.tcpServer.listen) em um servidor TCP soquete:
function listenAndAccept(socketId) {
chrome.sockets.tcpServer.listen(socketId,
IP, PORT, function(resultCode) {
onListenCallback(socketId, resultCode)
});
}
Mantenha um identificador no socketId
para aceitar novas conexões mais tarde.
(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)
}
Quando uma nova conexão é estabelecida, onAccept
é invocado com o clientSocketId
do novo
uma conexão com a Internet. O ID do soquete do cliente precisa ser usado com a API sockets.tcp. O soquete do novo
é pausada por padrão. Retome-o com sockets.tcp.setPaused para começar a receber
dados.
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);
}
Parar de aceitar conexões de clientes
Chame sockets.tcp.disconnect no código do soquete do servidor para parar de aceitar novas conexões.
chrome.sockets.tcpServer.onAccept.removeListener(onAccept);
chrome.sockets.tcpServer.disconnect(serverSocketId);