This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:37.
Address: https://crxdoc-zh.appspot.com/apps/app_network.html
Title: 网络通信 - Google Chrome 应用开发文档(非官方中文版)  •  Size: 25527

网络通信

Chrome 应用可以用作 TCP 与 UDP 连接的网络客户端,该文档向您展示如何使用 TCP 与 UDP 在网络上发送与接收数据。有关更多信息,请参见套接字 API

API 示例:想试试这些代码吗?请参见 telnet udp 示例。

清单文件的要求

对于使用 TCP 或 UDP 的 Chrome 应用来说,请向清单文件添加 "socket" 权限并指定 IP 端点权限规则。例如:

"permissions": [
    {"socket": [
      "rule1",
      "rule2",
      ...
    ]}
  ]

套接字权限规则的语法遵循如下模式:

<socket-permission-rule>
     := <op> | <op> ':' <host> | <op> ':' ':' <port> |
        <op> ':' <host> ':' <port>
 <op> := 'tcp-connect' | 'tcp-listen' | 'udp-bind' | 'udp-send-to'
 <host> := '*' | '*.' <anychar except '/' and '*'>+
 <port> := '*' | <port number between 1 and 65535>)

套接字权限规则的例子如下:

使用 TCP

Chrome 应用可以连接到任何支持 TCP 的服务。

连接到套接字

如下是一个演示如何连接(socket.connect)到套接字的示例:

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

保存 socketId 的值以便您可以之后读取或写入(socket.write)套接字。

chrome.socket.write(socketId, arrayBuffer, onWriteCompleteCallback);

读取或写入套接字

读取(socket.read)或写入套接字时使用 ArrayBuffer 对象。要想了解 ArrayBuffer,请参见 JavaScript 类型化数组概述和如何在 ArrayBuffer 和字符串之间转换的教程。

chrome.socket.read(socketId, null, function(readInfo) {
  if (readInfo.resultCode > 0) {
    // readInfo.data 是一个 ArrayBuffer 对象。
  }
});

断开套接字的连接

如下是断开连接(socket.disconnect)的方法:

chrome.socket.disconnect(socketId);

使用 UDP

Chrome 应用可以连接到支持 UDP 的任何服务。

发送数据

如下是演示如何使用 UDP 通过网络发送数据的示例:

// 创建套接字
chrome.socket.create('udp', '127.0.0.1', 1337, {},
 function(socketInfo) {
   // 套接字已创建,现在我们希望连接到服务
   var socketId = socketInfo.socketId;
   chrome.socket.connect(socketId, function(result) {
     // 已连接到套接字,发送一些数据
     chrome.socket.write(socketId, arrayBuffer,
       function(sendInfo) {
         console.log("已写入字节数:" + sendInfo.bytesWritten);
       }
     );
   });
 }
);

接收数据

这一例子与“发送数据”的例子很相似,但是在 create 方法中增加了一个特殊的处理函数。该参数为一个对象,只包含一个值 'onEvent',内容为一个函数引用,指向数据在端口上可用时调用的方法。

// 处理数据响应
var handleDataEvent = function(d) {
  var data = chrome.socket.read(d.socketId);
  console.log(data);
};

// 创建套接字
chrome.socket.create('udp', '127.0.0.1', 1337, { onEvent: handleDataEvent },
 function(socketInfo) {
   // 套接字已创建,现在我们希望连接到服务
   var socketId = socketInfo.socketId;
   chrome.socket.connect(socketId, function(result) {
     // 已连接到套接字,发送一些数据
     chrome.socket.write(socketId, arrayBuffer,
       function(sendInfo) {
         console.log("已写入字节数:" + sendInfo.bytesWritten);
       }
     );
   });
 }
);