Ağ İletişimi

Chrome Uygulamaları, TCP ve UDP bağlantıları için bir ağ istemcisi görevi görebilir. Bu belgede, ağ üzerinden veri gönderip almak için TCP ve UDP'nin nasıl kullanılacağı gösterilmektedir. Daha fazla bilgi için Sockets UDP, Sockets TCP ve Sockets TCP Server API'lerini inceleyin.

Manifest gereksinimleri

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

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

Yuva "ana makine-kalıbı" girişlerinin söz dizimi şu kuralları izler:

<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 manifest girişi örnekleri:

  • { "tcp": { "connect" : "*:23" } }: Tüm ana makinelerin 23. bağlantı noktasından bağlanıyor
  • { "tcp": { "connect" : ["*:23", "*:80"] } }: Tüm ana makinelerin 23 veya 80 numaralı bağlantı noktasında bağlanır
  • { "tcp": { "connect" : "www.example.com:23" } } - www.example.com adresinin 23. bağlantı noktası
  • { "tcp": { "connect" : "" } }: Tüm ana makinelerin tüm bağlantı noktalarını bağlama
  • { "udp": { "send" : ":99" } }: Tüm ana makinelerin 99 numaralı bağlantı noktasına UDP paketi gönderiliyor
  • { "udp": { "bind" : ":8899" } }: UDP paketlerini almak için yerel bağlantı noktası 8899'u bağlar
  • { "tcpServer": { "listen" : ":8080" } }–TCP, yerel bağlantı noktası 8080'de dinleme

TCP'yi Kullanma

Chrome Uygulamaları, TCP'yi destekleyen tüm hizmetlerle bağlantı kurabilir.

Bir yuvaya bağlanılıyor

(sockets.tcp.connect) bir yuvaya nasıl bağlanılacağını gösteren bir örneği aşağıda bulabilirsiniz:

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

Daha sonra verileri (sockets.tcp.send) alıp bu yuvaya gönderebilmek için socketId üzerinde tutma yerini tutun.

Yuvadan alma ve yuvaya gönderme

(sockets.tcp.onReceive) kaynağından alma ve bir yuvaya gönderme işlemleri ArrayBuffer nesnelerini kullanır. ArrayBuffers hakkında bilgi edinmek için genel bakışa, JavaScript türünde diziler ve ArrayBuffer'ı String'den ve dizeden dönüştürme başlıklı eğiticiye göz atın.

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 tüm hizmetlerle bağlantı kurabilir.

Veri gönderiliyor

UDP kullanarak ağ üzerinden nasıl veri (sockets.udp.send) gönderileceğini gösteren bir örneği burada bulabilirsiniz:

// 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, veri almak için bir etkinlik işleyici ayarlamamız dışında "Veri gönderme" örneğine çok benzer.

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'yi kullanarak TCP sunucuları gibi davranabilir.

TCP sunucusu yuvası oluşturma

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

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

İstemci bağlantılarını kabul etme

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

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 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 yeni TCP bağlantısının clientSocketId ile onAccept çağrılır. İstemci yuva kimliği, sockets.tcp API ile kullanılmalıdır. Yeni bağlantının yuvası varsayılan olarak duraklatılmıştır. Veri almaya başlamak için sockets.tcp.setPaused ile duraklatmayı kaldırın.

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'i çağırın.

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