Ağ İletişimi

Chrome Uygulamaları, TCP ve UDP bağlantıları için bir ağ istemcisi görevi görebilir. Bu dokümanda, Ağ üzerinden veri göndermek ve almak için TCP ve UDP kullanılabilir. Daha fazla bilgi için Yuvalar UDP, Sockets TCP ve Sockets TCP Server API'leri.

Manifest ile ilgili gereksinimler

TCP veya UDP kullanan Chrome Uygulamaları için sockets girişini manifest dosyasına ekleyin ve IP'yi belirtin. uç nokta izin kuralları. Örneğin:

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

"ana makine-modeli" soketinin söz dizimi girişlerin şu kuralları izlemesi gerekir:

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

Söz diziminin ayrıntılı açıklaması için Yuva Manifest Anahtarı bölümüne bakın.

Yuva manifesti giriş örnekleri:

  • { "tcp": { "connect" : "*:23" } }: Herhangi bir ana makinenin 23 numaralı bağlantı noktasından bağlanıyor
  • { "tcp": { "connect" : ["*:23", "*:80"] } }: Herhangi bir ana makinenin 23 veya 80 numaralı bağlantı noktasından bağlanıyor
  • { "tcp": { "connect" : "www.example.com:23" } }: www.example.com adresindeki bağlantı noktası 23'ü bağlama
  • { "tcp": { "connect" : "" } }: Ana makinelerin herhangi bir bağlantı noktasını bağlama
  • { "udp": { "send" : ":99" } }: UDP paketinin ana makinelerin 99 numaralı bağlantı noktasına gönderilmesi
  • { "udp": { "bind" : ":8899" } }: UDP paketlerini almak için yerel bağlantı noktası 8899'u bağlama
  • { "tcpServer": { "listen" : ":8080" } }: Yerel bağlantı noktası 8080'de TCP dinleme

TCP'yi kullanma

Chrome Uygulamaları, TCP'yi destekleyen herhangi bir hizmetle bağlantı kurabilir.

Yuvaya bağlanılıyor

Aşağıda, bir yuvaya (sockets.tcp.connect) nasıl bağlanacağını gösteren bir örnek verilmiştir:

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

Daha sonra veri alıp gönderebilmek için socketId herkese açık kullanıcı adını kullanın. (sockets.tcp.send) ekleyebilirsiniz.

Yuvadan alma ve sokete gönderme

(sockets.tcp.onReceive) veri almak ve bir yuvaya göndermek için ArrayBuffer nesneleri kullanılır. Alıcı: ArrayBuffers hakkında bilgi edinin, genel bakışı,JavaScript türünde diziler'i ve eğiticiyi inceleyin ArrayBuffer'ı String'e ve String'den dönüştürme.

chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);
chrome.sockets.tcp.onReceive.addListener(function(info) {
  if (info.socketId != socketId)
    return;
  // info.data is an arrayBuffer.
});

Priz bağlantısını kesme

Bağlantının nasıl kesileceği aşağıda açıklanmıştır (sockets.tcp.disconnect):

chrome.sockets.tcp.disconnect(socketId);

UDP'yi kullanma

Chrome Uygulamaları, UDP'yi destekleyen herhangi bir hizmetle bağlantı kurabilir.

Veri gönderiliyor

Aşağıda, UDP kullanılarak ağ üzerinden nasıl veri (sockets.udp.send) gönderileceğini gösteren bir örnek verilmiştir:

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

Veri alınıyor

Bu örnek, "Sending data" (Veri gönderme) Bunun dışında, her bir etkinlik için verileri alıyor.

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 Sunucusunu Kullanma

Chrome Uygulamaları, sockets.tcpServer API'sini kullanarak TCP sunucuları gibi davranabilir.

TCP sunucu yuvası oluşturma

sockets.tcpServer.create komutunu kullanarak bir TCP sunucu yuvası oluşturun.

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

İstemci bağlantıları kabul ediliyor

Aşağıda, TCP sunucusunda bağlantıların (sockets.tcpServer.listen) nasıl kabul edileceğini gösteren bir örnek verilmiştir. yuva:

function listenAndAccept(socketId) {
  chrome.sockets.tcpServer.listen(socketId,
    IP, PORT, function(resultCode) {
      onListenCallback(socketId, resultCode)
  });
}

Daha sonra yeni bağlantıları kabul edebilmek için socketId herkese açık kullanıcı adını kullanın (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)
}

Yeni bir bağlantı kurulduğunda onAccept, yeni TCP'nin clientSocketId ile çağrılır bağlantı. İstemci yuvası kimliği sockets.tcp API ile birlikte kullanılmalıdır. Yeni cihazın yuvası Bağlantı varsayılan olarak duraklatılır. Almaya başlamak için sockets.tcp.setPaused komutuyla duraklatmayı kaldırın dışı verilerdir.

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

İstemci bağlantılarını kabul etmeyi durdur

Yeni bağlantıları kabul etmeyi durdurmak için sunucu yuvası kimliğinde sockets.tcp.disconnect çağrısı yapın.

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