اتصالات الشبكة

يمكن لتطبيقات Chrome العمل كعميل شبكة لاتصالات TCP وUDP. يوضّح لك هذا المستند كيفية استخدام بروتوكولا TCP وUDP لإرسال البيانات واستلامها عبر الشبكة. لمزيد من المعلومات، يمكنك الاطّلاع على قسم المقابس. واجهات برمجة التطبيقات UDP وSockets TCP وSockets TCP Server.

متطلبات ملف البيان

بالنسبة إلى تطبيقات Chrome التي تستخدم بروتوكول TCP أو UDP، أضِف إدخال 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>)

يمكنك الاطّلاع على مفتاح بيان واجهة برمجة التطبيقات Sockets للحصول على وصف تفصيلي للبنية.

أمثلة على إدخالات بيان المقبس:

  • { "tcp": { "connect" : "*:23" } }: الاتصال عبر المنفذ 23 من أي مضيف
  • { "tcp": { "connect" : ["*:23", "*:80"] } }: الاتصال عبر المنفذ 23 أو 80 من أي مضيفات
  • { "tcp": { "connect" : "www.example.com:23" } }–جارٍ الاتصال المنفذ 23 من www.example.com
  • { "tcp": { "connect" : "" } }: اتصال أي منافذ من أي مضيفين
  • { "udp": { "send" : ":99" } }: إرسال حزمة UDP إلى المنفذ 99 من أي مضيفات
  • { "udp": { "bind" : ":8899" } }: ربط المنفذ المحلي 8899 لتلقّي حِزم بروتوكول مخطط بيانات المستخدم (UDP)
  • { "tcpServer": { "listen" : ":8080" } }–تتم معالجة بروتوكول TCP عبر المنفذ المحلي 8080

استخدام بروتوكول التحكم بالنقل

يمكن لتطبيقات Chrome إجراء اتصالات بأي خدمة تتوافق مع بروتوكول التحكم بالنقل.

الاتصال بمقبس

في ما يلي نموذج يوضّح كيفية ربط (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 إلى سلسلة ومنها.

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.

جارٍ إرسال البيانات

في ما يلي نموذج يوضّح كيفية إرسال البيانات (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 العمل كخوادم TCP باستخدام واجهة برمجة التطبيقات sockets.tcpServer.

إنشاء مقبس خادم 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 الجديد. الاتصال. يجب استخدام معرّف مقبس العميل مع واجهة برمجة التطبيقات 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);