2015-09-14 35 views
1

我試圖從Firefox發送一些數據到java桌面應用程序.so我的java類作爲服務器和Firefox腳本工作作爲客戶端。當我測試它使用另一個java類是client.java數據成功發送到server.java如何當我使用這個Firefox腳本發送數據,它實際上連接到服務器。但send("text");不工作實時。我的意思是接收服務器顯示數據當我關閉插座socket.close();。但我知道server.java代碼沒有問題。由firefox發送的數據socket.send()無法檢索,直到關閉套接字

這不起作用

setTimeout(function(){socket.send("i'm firefox");},5000); // because socket isn't closed yet 

這項工作

setTimeout(function(){socket.send("i'm firefox");},5000); 
setTimeout(function(){socket.close();},6000); 

,但我真的不想關閉套接字,因爲我想通過一個發送大量的數據之一。

這裏是暫存器[-browser]

var tcpSocket = Cc["@mozilla.org/tcp-socket;1"].createInstance(Ci.nsIDOMTCPSocket); 
var socket = tcpSocket.open("127.0.0.1", 5000); 

setTimeout(function(){socket.send("i'm firefox");},5000); 
//setTimeout(function(){socket.close();},8000);// i'm firefox text retrieve by server when run this line/when close the socket. 

我認爲Java代碼是不是important.but here它是測試的完整代碼。

我在問爲什麼我需要關閉套接字發送數據?以及如何在不關閉套接字的情況下發送數據?


更新

i made a Gif在這裏展示我的問題,你可以看到數據未發送實時但當套接字關閉所有的數據刷新。

enter image description here

回答

2

它實際上工作。正在接收數據,但你目前正在等待一個新的行打印您收到的郵件:

while ((inputLine = in.readLine()) != null) { 
    System.out.println("Server: " + inputLine); 
    out.println(inputLine); 

    if (inputLine.equals("Bye.")) { 
     break; 
    } 
} 

,當你關閉套接字目前只發生。只需在消息結尾處添加新行,它將按預期工作:

var tcpSocket = Cc["@mozilla.org/tcp-socket;1"].createInstance(Ci.nsIDOMTCPSocket); 
var socket = tcpSocket.open("127.0.0.1", 5000); 

function sendMessage(msg){ 
    socket.send(msg + "\n"); 
} 

setTimeout(function(){ 
    sendMessage("hi mark"); 
},3000); 

setTimeout(function(){ 
    sendMessage("hi johnny"); 
},5000); 
+0

ohh非常感謝你。我從來沒有想過這件事。我認爲我的插件腳本有問題。 –

+0

我沒有看到它馬上:)高興地幫助 – cviejo

相關問題