firefox tcp socket.send() 发送的数据在关闭套接字之前无法恢复
data send by firefox tcp socket.send() can't retrive until close the socket
我正在尝试将一些数据从 Firefox 发送到 java 桌面应用程序。所以我的 java class 作为服务器工作,而 Firefox 脚本作为客户端工作。当我使用另一个 java class 测试它 client.java
数据成功发送到 server.java
然而当我使用这个 firefox 脚本发送数据时,它实际上连接到服务器。但是send("text");
不能实时工作。我的意思是当我关闭套接字时服务器显示接收到的数据 socket.close();
。但我知道 server.java
代码没有问题。
这行不通
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 在这里显示我的问题,您可以看到数据不是实时发送的,但是当套接字关闭时,所有数据都会被刷新。
它确实有效。正在接收您的数据,但您目前正在等待换行打印您收到的消息:
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);
我正在尝试将一些数据从 Firefox 发送到 java 桌面应用程序。所以我的 java class 作为服务器工作,而 Firefox 脚本作为客户端工作。当我使用另一个 java class 测试它 client.java
数据成功发送到 server.java
然而当我使用这个 firefox 脚本发送数据时,它实际上连接到服务器。但是send("text");
不能实时工作。我的意思是当我关闭套接字时服务器显示接收到的数据 socket.close();
。但我知道 server.java
代码没有问题。
这行不通
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 在这里显示我的问题,您可以看到数据不是实时发送的,但是当套接字关闭时,所有数据都会被刷新。
它确实有效。正在接收您的数据,但您目前正在等待换行打印您收到的消息:
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);