2012-03-05 30 views
1

我需要從我的C#應用​​程序向我的Firefox擴展發送一些字符串(名稱,數字),我已經閱讀了一些做法,但不知道如何實現它。從C#應用程序到Firefox擴展的通信

  1. 管道
  2. 套接字(HTTP請求)

如果使用其HTTP請求其更好。

UPDATE

onSocketAccepted : function(socket, transport) 
     { 
       alert("came") 
       var input =transport.openInputStream(0, 0, 0); 
       alert(input) 
    } 

確實i。從C#應用程序發送該消息將在VAR輸入???

+0

歡迎堆棧溢出。請閱讀[如何問](http://stackoverflow.com/questions/how-to-ask),[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have - 你試過/),和[如何問問題的智能方式](http://catb.org/esr/faqs/smart-questions.html)。 – 2012-03-05 13:15:37

回答

2

在C#中端DO

using System.Net; 
using System.Net.Sockets; 

static Socket sck; 

acceptClient(String str) 
     { 
      sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 777); 
      try 
      { 
       sck.Connect(localEndPoint); 
       string text = str; 
       byte[] data = Encoding.ASCII.GetBytes(text); 

       sck.Send(data); 
       // MessageBox.Show("Data Sent!\r\n"); 
      } 
      catch 
      { 
       MessageBox.Show("Unable to connect to remote end point!\r\n"); 
      } 

     } 

在擴展DO

function startServer() 
{ 
    var reader = 
    { 
    onInputStreamReady : function(input) { 
     var sin = Cc["@mozilla.org/scriptableinputstream;1"] 
        .createInstance(Ci.nsIScriptableInputStream); 
     sin.init(input); 
     sin.available(); 

     //alert('count:'+count) 
     var request = ''; 
     vaulee=''; 
     while (sin.available()) { 
      request = request + sin.read(5120); 

     } 
     careditcardnum=request; 
     //alert(request) 


     input.asyncWait(reader,0,0,null); 

    } 

    }   
    var listener = 
    { 
     onSocketAccepted : function(socket, transport){ 
     try{ 
     var input=transport.openInputStream(0,0,0).QueryInterface(Ci.nsIAsyncInputStream); 
     var output = transport.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0); 
       var tm = Cc["@mozilla.org/thread-manager;1"].getService(); 
       input.asyncWait(reader,0,0,tm.mainThread); 
       //stream.close(); 

      } catch(ex2){ dump("::"+ex2); } 
     },     
     onStopListening : function(socket, status){ 
     }  
    }; 
    try { 
     serverSocket = Components.classes["@mozilla.org/network/server-socket;1"] 
     .createInstance(Components.interfaces.nsIServerSocket); 

     serverSocket.init(777,true,-1); 
     serverSocket.asyncListen(listener); 
    } catch(ex){ dump(ex); } 
} 
0

這是最簡單的使用TCP套接字。 Firefox附加組件可以使用nsIServerSocket運行TCP服務器。你可以看到一個非常簡單的服務器實現here(屬於Extension Auto-Installer擴展)。這不是一個HTTP服務器 - 它只是在不考慮HTTP頭的情況下拋棄它。還有一個full HTTP server implementation用於Firefox單元測試 - 但你可能不希望它複雜。

+0

謝謝,但我沒有想法實現它可以幫助我 – cwishva 2012-03-11 11:14:54

+0

@cwishva:堆棧溢出不是有人會爲你寫代碼的地方。如果你嘗試了某些東西,但不確定它爲什麼不起作用 - 請隨時在這裏提問。 – 2012-03-11 12:17:36

+0

遐我明白謝謝你的幫助,我得到了連接,但閱讀從C#應用程序發送的字符串有困難 onSocketAccepted:function(socket,transport){ alert(「came」) var input = transport。 openInputStream(0,0,0); 提醒(輸入) } 我發送的字符串應該在var輸入裏。 – cwishva 2012-03-13 10:30:01