2011-10-23 17 views
6

Obecnie pracuję nad dodatkiem firefox, który jest klientem, który łączy się za pomocą gniazd TCP z serwerem.Gniazdo XPCOM się zamyka. Jak utrzymać to przy życiu?

W moim małym teście wszystko działa poprawnie, klient (ff add-on) łączy się z serwerem (zaprojektowanym w Javie) i wysyła wiadomość, ale po tym firefox zamyka gniazdo.

Wiem, że to nie jest problem z moim kodem na serwerze, ponieważ mogę łączyć się z innymi klientami (zaprojektowanymi w java i C++) i nigdy nie zamykać połączenia.

Myślę, że problem polega na tym, że firefox niszczy obiekt gniazda, gdy nie ma do niego odniesienia, co powoduje zamknięcie połączenia.

Zresztą tutaj jest mój kod:

const {Cc,Ci} = require("chrome"); 

var host="192.168.1.100"; 
var port=9001; 
var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"] 
          .getService(Components.interfaces.nsISocketTransportService) 
          .createTransport(null, 0, host, port, null); 

var inputStream = transport.openInputStream(0, 0, 0); 
var inputInterface = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); 
inputInterface.setInputStream(inputStream); 

var outputStream = transport.openOutputStream(0, 0, 0); 
var outputInterface = Components.classes["@mozilla.org/binaryoutputstream;1"].createInstance(Components.interfaces.nsIBinaryOutputStream); 
outputInterface.setOutputStream(outputStream); 

var msg="some message"; 
outputInterface.writeUtf8Z(msg); 

używam Firefoksa 7, i buduję ten dodatek przy użyciu przeglądarki Firefox SDK.

Jakieś pomysły na to, jak utrzymać gniazdo przy życiu, do dalszych odczytów?

Dzięki

+0

"niszczy obiekt gniazda po braku odniesienia do niego" - jest całkiem możliwe. Gdzie umieściłeś opublikowany kod? I jest niekompletne - używa niezdefiniowanych w kontekście modułów Addon SDK Components.classes zamiast Cc ... – Nickolay

+3

Tak, jeśli nie ma odniesienia do gniazda lub jego strumieni, to będzie to śmieci, które go zamkną. Ale w tym momencie gniazdo jest już bezużyteczne, ponieważ utraciłeś wszystkie odniesienia do niego i nie masz możliwości ponownego dostępu do niego. Nie sądzę, że naprawdę to robisz ... –

Odpowiedz

Powiązane problemy