ارتباطات شبکه

Chrome Apps می تواند به عنوان یک سرویس گیرنده شبکه برای اتصالات TCP و UDP عمل کند. این سند به شما نشان می دهد که چگونه از TCP و UDP برای ارسال و دریافت داده ها از طریق شبکه استفاده کنید. برای اطلاعات بیشتر، به سوکت‌های UDP ، Sockets TCP و Sockets TCP Server API مراجعه کنید.

الزامات آشکار

برای برنامه‌های Chrome که از TCP یا UDP استفاده می‌کنند، ورودی سوکت‌ها را به مانیفست اضافه کنید و قوانین مجوز نقطه پایان IP را مشخص کنید. به عنوان مثال:

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

نحو ورودی های "میزبان-الگوی" سوکت از این قوانین پیروی می کند:

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

برای توضیح دقیق نحو ، کلید Manifest Sockets را ببینید.

نمونه هایی از ورودی های مانیفست سوکت:

  • { "tcp": { "connect" : "*:23" } } –اتصال در پورت 23 هر هاست
  • { "tcp": { "connect" : ["*:23", "*:80"] } } –اتصال در پورت 23 یا 80 هر هاست
  • { "tcp": { "connect" : "www.example.com:23" } } –connecting port 23 www.example.com
  • { "tcp": { "connect" : "" } } – اتصال هر پورت هر میزبانی
  • { "udp": { "send" : ":99" } } ارسال بسته UDP به پورت 99 هر میزبانی
  • { "udp": { "bind" : ":8899" } } - اتصال پورت محلی 8899 برای دریافت بسته های UDP
  • { "tcpServer": { "listen" : ":8080" } } گوش دادن TCP در پورت محلی 8080

با استفاده از TCP

Chrome Apps می‌تواند به هر سرویسی که از 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 استفاده می کند. برای آشنایی با ArrayBuffer ها، نمای کلی، آرایه های تایپ شده جاوا اسکریپت و آموزش نحوه تبدیل 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 Apps می‌تواند به هر سرویسی که از UDP پشتیبانی می‌کند اتصال برقرار کند.

ارسال داده

در اینجا یک نمونه نشان می دهد که چگونه داده ها ( sockets.udp.send ) را از طریق شبکه با استفاده از 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);
  });
});

دریافت داده ها

این مثال بسیار شبیه به مثال "ارسال داده" است، با این تفاوت که ما یک کنترل کننده رویداد را برای دریافت داده تنظیم می کنیم.

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 Apps می تواند به عنوان سرور TCP با استفاده از sockets.tcpServer API عمل کند.

ایجاد سوکت سرور TCP

یک سوکت سرور TCP با sockets.tcpServer.create ایجاد کنید.

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

پذیرش اتصالات مشتری

در اینجا نمونه ای از نحوه پذیرش اتصالات ( sockets.tcpServer.listen ) در سوکت سرور TCP آورده شده است:

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

هنگامی که یک اتصال جدید برقرار می شود، onAccept با clientSocketId اتصال TCP جدید فراخوانی می شود. شناسه سوکت مشتری باید با API sockets.tcp استفاده شود. سوکت اتصال جدید به طور پیش فرض متوقف شده است. برای شروع دریافت داده، آن را با 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);
}

پذیرش اتصالات مشتری را متوقف کنید

برای توقف پذیرش اتصالات جدید، با شناسه سوکت سرور sockets.tcp.disconnect تماس بگیرید.

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