该页面翻译自 Google Chrome Extensions 与 Google Chrome Apps。除非特别说明,该页面的内容遵循 Creative Commons Attribution 3.0 License,代码示例遵循 BSD License。
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>)
套接字权限规则的例子如下:
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);
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); } ); }); } );