2011-10-23 22 views
6

मैं वर्तमान में एक फ़ायरफ़ॉक्स एड-ऑन विकसित कर रहा हूं जो एक क्लाइंट है जो सर्वर पर टीसीपी सॉकेट का उपयोग करता है।XPCOM सॉकेट बंद हो रहा है। इसे जीवित कैसे रखें?

मेरे छोटे परीक्षण में सब ठीक काम करता है, क्लाइंट (एफएफ ऐड-ऑन) सर्वर से कनेक्ट होता है (जावा में डिज़ाइन किया गया है) और एक संदेश भेजता है, लेकिन उसके बाद फ़ायरफ़ॉक्स सॉकेट बंद कर रहा है।

मैं जानता हूँ कि यह सर्वर साइड पर अपने कोड के साथ एक समस्या नहीं है, के बाद से मैं (जावा और सी ++ में तैयार किया गया है) अन्य ग्राहकों के साथ कनेक्ट कर सकते हैं और वे कनेक्शन बंद कभी नहीं।

मुझे लगता है कि समस्या यह है कि फ़ायरफ़ॉक्स सॉकेट वस्तु को नष्ट कर देता के बाद वहाँ के लिए कोई संदर्भ है, तो इसके कनेक्शन बंद करने है।

वैसे भी यहां मेरे कोड है:

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

मैं फ़ायरफ़ॉक्स 7 उपयोग कर रहा हूँ, और मैं ऐड-ऑन का निर्माण कर रहा हूँ फ़ायरफ़ॉक्स ऐड-ऑन SDK का उपयोग।

कैसे सॉकेट जिंदा, आगे रीडिंग के लिए रखने के लिए पर कोई भी विचार?

धन्यवाद

+0

"सॉकेट वस्तु को नष्ट कर देता के बाद वहाँ यह करने के लिए कोई संदर्भ नहीं है" - इसलिए संभव है। आपने जिस कोड को पोस्ट किया था उसे आपने कहां रखा? और यह अधूरा है - यह युद्ध एसडीके के संदर्भ में अपरिभाषित का उपयोग करता मॉड्यूल प्रतिलिपि ... – Nickolay

+3

के बजाय Components.classes हाँ, अगर वहाँ सॉकेट या उसके धाराओं के लिए कोई संदर्भ है तो यह कचरा एकत्र जो यह बंद हो जाएगा हो जाएगा। लेकिन उस बिंदु पर सॉकेट पहले से ही बेकार है क्योंकि आपने इसके सभी संदर्भ खो दिए हैं और इसे फिर से एक्सेस करने का कोई तरीका नहीं है। मुझे नहीं लगता कि आप वास्तव में ऐसा करते हैं ... –

उत्तर

संबंधित मुद्दे