9

Yalnızca LAN için kullanılan bir Chrome Paket Uygulaması oluşturmak istiyorum; burada bir örnek sunucu olarak hizmet veriyor (oturum ana bilgisayarı) ve diğer örnekler sunucuyu bulup oturuma katılmalıdır. Bu chrome.socket ile elde edilebilir mi? Ben ss -ua görebiliyorum,Yayınlama veya çoklu yayın için chrome.socket nasıl kullanılabilir?

var socket = chrome.socket || chrome.experimental.socket; 
socket.create('udp', {}, function(createInfo) { 
    var publish_socket = createInfo.socketId; 
    socket.bind(publish_socket, '225.0.0.42', 42424, function (result) { 
     if (result < 0) console.error(result); // this works fine 
     socket.recvFrom(publish_socket, null, function(recvFromInfo) { 
      console.log(recvFromInfo); // UNABLE TO MAKE THIS HAPPEN 
     }); 
    }); 
    // Chrome won't let me listen for app window closing 
    var cleanup_timer; 
    cleanup_timer = setInterval(function(){ 
      if (requesting_window.closed) { 
       socket.destroy(publish_socket); 
       clearInterval(cleanup_timer); 
      } 
     }, 
     5000 
    ); 
}); 

soket bağlı:

böyle sunucuyu kurduktan

State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port 
UNCONN  0  0   225.0.0.42:42424   *:* 

Fakat sunucu asla herhangi bir veri almak gibi görünüyor. Hiçbir başarı ile ancak nc -uv 225.0.0.42 42424 kullanarak bazı veri ve chrome.socket API gönderme denedi:

socket.create('udp', {}, function(socketInfo) { 
    var socketId = socketInfo.socketId; 
    socket.sendTo(socketId, str2ab("discovering"), '225.0.0.42', 42424, function(writeInfo) { 
     if (writeInfo.bytesWritten < 0) console.error(writeInfo); 
    }); 
}); 

Bu sunucu tarafında istemci tarafında ve hiçbir şey hata kodu -15 sonuçlanır.

Bir yere yerleştirilmiş çok noktaya yayın bayrağı olması gerektiğinden şüpheleniyorum ama bulamadım.

ben adres daha sonra (keşfettiğiniz gibi, rastgele liman işleri ile 0.0.0.0)

+1

[Belki bu bağlantı size yardımcı olacaktır] (https://github.com/KensakuKOMATSU/chrome-upnp). –

+0

@Cicada Bağlantı için teşekkürler. 'SendTo' satırından önce socket.bind (socketId, 0.0.0.0", 0, function (res) {...}) 'yi ekledim ve veri gönderilirken şikayette bulunmayı bıraktım. Maalesef, çok noktaya yayın paketlerine ** nasıl ** dinleyeceğimi bilmiyorum. – hlidka

cevap

3

yapmanız gereken tüm yerel bir arayüz bağlamak olduğunu noktaya yayın paketlerini göndermek için Chrome Sürümü 23.0.1246.0 dev kullanarak ve am Doğru grup/bağlantı noktasına bir paket (sendTo'un yapacağı şey).

Çok noktaya yayın verilerini almak için her ikisinin de doğru bağlantı noktasına bağlamanız gerekir (0.0.0.0 modelinde), ardından doğru çok noktaya yayın grubuna katılın. İlk biti socket.bind ile yapabilir, ancak ikincisi normal olarak setsockopt ve bayrağı IP_ADD_MEMBERSHIP ile yapılır. Maalesef Chrome soket API'sı buna erişim sağlamıyor. Bu çağrıyı yaptığınızda, sistem, yönlendiricilere, belirli bir grup için çok noktaya yayın paketlerini arabiriminize iletecekleri yönlendirme yapan ağa bir IGMP gönderir ve doğru bağlantı noktasına bağlanması, bunları almak için yeterli olur. Normalde işletim sistemine çok noktaya yayın paketlerini geridöngü arabirimi ile çoğaltmalarını da sağlayabilirsiniz (böylece aynı makinede çok noktaya yayın kullanabilirsiniz). Muhtemelen makinelerin doğrudan birbirine bağlı olması durumunda mevcut kodunuzun çalışacağını, ancak bir anahtarla bağlandığınızı (paketler sizin abone olmadığınız gibi bırakacağınız) değil de, eğer üzerindeyseniz de değilsinizdir. Aynı makine (paketler geri döngü arabirimi üzerinden yol almadığı için).

Bunun geleneksel çözümü, çok noktaya yayınların yerel makinede değil, bir anahtar aracılığıyla çalışmasına izin veren bir IGMP paketi oluşturmaktır. Ne yazık ki bu ham IP paketleri (TCP veya UDP değil) göndermek için erişim ihtiyacı ve chrome.socket bunu sağlamaz.

Bu, başka bir programın sizin adınıza çok noktaya yayın grubuna katılmadan, hiçbir şey alamayacağınız anlamına gelir.

+0

Birden çok noktaya yayın gruplarını birleştirmek/bırakmak chrome.socket API'sinde artık kullanılabilir (geri döngü isteği ile birlikte.) https://developer.chrome.com/apps/socket –