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