我需要从我的C#应用程序向我的Firefox扩展程序发送一些字符串(名称,编号),我已经阅读了一些操作技巧,但不知道如何实现它。
如果它使用HTTP请求更好。
更新
onSocketAccepted : function(socket, transport)
{
alert("came")
var input =transport.openInputStream(0, 0, 0);
alert(input)
}
我从C#应用程序发送的消息是否在var输入中
答案 0 :(得分:2)
在C#Side 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); }
}
答案 1 :(得分:0)
最简单的方法是使用TCP套接字。 Firefox加载项可以使用nsIServerSocket运行TCP服务器。您可以看到一个非常简单的服务器实现here(属于Extension Auto-Installer扩展)。这不是一个HTTP服务器 - 它只是扔掉它认为的HTTP标头而不看它们。还有一个full HTTP server implementation用于Firefox单元测试 - 但你可能不希望它那么复杂。
答案 2 :(得分:0)
你可以试试SignalR。