firefox tcp socket.send()发送的数据无法恢复,直到关闭套接字

时间:2015-09-14 03:11:52

标签: javascript firefox-addon firefox-addon-sdk tcpsocket

我试图将一些数据从Firefox发送到java桌面应用程序。所以我的java类作为服务器工作,Firefox脚本作为客户端工作。当我使用另一个java类{{1}进行测试时数据成功发送到client.java当我使用这个firefox脚本发送数据时,它实际上连接到服务器。但server.java没有实时工作.i mean sever显示收到的数据时我关闭套接字send("text");。但我知道socket.close();代码没有问题。

这不起作用

server.java

这项工作

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

但我真的不想关闭套接字,因为我想逐个发送大量数据。

这是在scratchpad [-browser]

上测试的完整代码
setTimeout(function(){socket.send("i'm firefox");},5000);
setTimeout(function(){socket.close();},6000); 

我认为java代码并不重要。但是here就是。

我问为什么我需要关闭套接字才能发送数据?如何在不关闭套接字的情况下发送数据?

<小时/> 更新

i made a Gif在这里显示我的问题,你可以看到数据没有实时发送,但是当套接字关闭时,所有数据都被刷新。

enter image description here

1 个答案:

答案 0 :(得分: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);