【问题标题】:Communication from C# Application to Firefox Extension从 C# 应用程序到 Firefox 扩展的通信
【发布时间】:2012-03-05 03:44:09
【问题描述】:

我需要从我的 C# 应用程序向我的 Firefox 扩展发送一些字符串(名称、号码),我已经阅读了一些技术,但不知道如何实现它。

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

如果它使用 HTTP 请求更好。

更新

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

我从 C# 应用程序发送的消息会在 var 输入中吗???

【问题讨论】:

标签: c# sockets firefox httpwebrequest firefox-addon


【解决方案1】:

在 C# 端做

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

        }

在扩展中做

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

【讨论】:

    【解决方案2】:

    使用 TCP 套接字是最简单的。 Firefox 附加组件可以使用nsIServerSocket 运行 TCP 服务器。您可以看到一个非常简单的服务器实现here(属于 Extension Auto-Installer 扩展)。这不是一个 HTTP 服务器——它只是丢弃任何它认为是 HTTP 标头而不查看它们的东西。还有一个 full HTTP server implementation 用于 Firefox 单元测试 - 但您可能不希望它那么复杂。

    【讨论】:

    • @cwishva:堆栈溢出不是有人为您编写代码的地方。如果您尝试过某事但不确定为什么它不起作用 - 请随时在此处提问。
    • 是的,我明白感谢您的帮助,我得到了连接,但在读取从 C# 应用程序 onSocketAccepted 发送的字符串时遇到问题:function(socket, transport){ alert("came") var input =transport.openInputStream(0, 0, 0); alert(input) } 我发送的字符串应该在 var 输入仪式中??
    • @cwishva:不,input 是您需要阅读的流。例如,您可以使用NetUtil.readInputStreamToString()。
    • input.available() 给我 0 这意味着没有收到字符串,但是当我从应用程序发送它时,任何原因都会建立连接?
    【解决方案3】:

    你可以试试 SignalR。

    https://github.com/SignalR/SignalR

    【讨论】:

    • 谢谢老兄,我想用 HTTP 套接字的方式来做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多