ネットワーク通信

Chrome アプリは、TCP 接続と UDP 接続のネットワーク クライアントとして機能します。このドキュメントでは、 TCP と UDP は、ネットワーク経由でデータを送受信します。詳細については、Sockets API に関するドキュメント UDPSockets TCPSockets TCP Server の各 API。

マニフェストの要件

TCP や UDP を使用する Chrome アプリの場合は、マニフェストに sockets エントリを追加し、IP アドレスを指定します。 エンドポイントの権限ルールで定義されます。例:

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

ソケット「host-pattern」の構文次のルールに従います。

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

構文の詳細については、ソケット マニフェスト キーをご覧ください。

ソケット マニフェスト エントリの例:

  • { "tcp": { "connect" : "*:23" } } - 任意のホストのポート 23 で接続
  • { "tcp": { "connect" : ["*:23", "*:80"] } } - 任意のホストのポート 23 または 80 で接続
  • { "tcp": { "connect" : "www.example.com:23" } } - www.example.com のポート 23
  • { "tcp": { "connect" : "" } } - 任意のホストの任意のポートの接続
  • { "udp": { "send" : ":99" } } - 任意のホストのポート 99 に UDP パケットを送信します
  • { "udp": { "bind" : ":8899" } } - UDP パケットを受信するようにローカルポート 8899 をバインドする
  • { "tcpServer": { "listen" : ":8080" } } - ローカルポート 8080 でリッスンする TCP

TCP の使用

Chrome アプリは、TCP をサポートするあらゆるサービスに接続できます。

ソケットへの接続

以下に、ソケットに接続する方法(sockets.tcp.connect)の例を示します。

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

後でデータを送受信できるように、socketId へのハンドルを保持します。 (sockets.tcp.send)をこのソケットに送信します。

ソケットとの送受信

sockets.tcp.onReceive からの受信とソケットへの送信には、ArrayBuffer オブジェクトを使用します。宛先 ArrayBuffers に関する詳細、概要、JavaScript 型配列、チュートリアル ArrayBuffer と 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.
});

ソケットからの切断

接続を解除する方法は次のとおりです(sockets.tcp.disconnect)。

chrome.sockets.tcp.disconnect(socketId);

UDP の使用

Chrome アプリは、UDP をサポートするあらゆるサービスに接続できます。

データの送信

次のサンプルは、UDP を使用してネットワーク経由でデータ(sockets.udp.send)を送信する方法を示しています。

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

データの受信

この例は「データの送信」セクションとイベント ハンドラを 1 つ設定する点だけが異なります。 データを受信できます。

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

TCP サーバーの使用

Chrome アプリは、sockets.tcpServer API により、TCP サーバーとして機能できます。

TCP サーバー ソケットの作成

sockets.tcpServer.create を使用して TCP サーバー ソケットを作成します。

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

クライアント接続の受け入れ

以下は、TCP サーバー上で接続(sockets.tcpServer.listen)を受け入れる方法を示すサンプルです。 socket:

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

後で新しい接続を受け入れられるように、socketId へのハンドルを保持します。 (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)
}

新しい接続が確立されると、新しい TCP の clientSocketIdonAccept が呼び出されます。 接続しますクライアント ソケット ID は sockets.tcp API で使用する必要があります。新しい デフォルトで一時停止されます。sockets.tcp.setPaused で一時停止を解除し、受信を開始します。 分析できます

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

クライアント接続の受け入れを停止する

サーバー ソケット ID に対して sockets.tcp.disconnect を呼び出し、新しい接続の受け入れを停止します。

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