網路通訊

Chrome 應用程式可做為 TCP 和 UDP 連線的網路用戶端。本文件將說明如何使用 TCP 和 UDP,透過網路傳送及接收資料。詳情請參閱通訊端 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" } } – 傳送 UDP 封包到任何主機的通訊埠 99
  • { "udp": { "bind" : ":8899" } } - 繫結本機通訊埠 8899,用於接收 UDP 封包
  • { "tcpServer": { "listen" : ":8080" } }-TCP 監聽本機通訊埠 8080

使用 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 物件。目的地: 請參閱總覽、JavaScript 類型陣列,以及教學課程。 如何將 ArrayBuffer 轉換為 String,以及如何將 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);
 
});
});

正在接收資料

這個範例與「傳送資料」差別在於,我們要為 接收資料

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) 通訊端:

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 的 clientSocketId 叫用 onAccept 以獲得最佳效能和最安全的連線用戶端通訊端 ID 必須與 sockets.tcp API 搭配使用。新 Pod 的通訊端 連線。如要開始接收訊息,請使用 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);