我正在通过从 FF 附加组件到 Java 服务器的套接字写入。我写了几个请求,服务器似乎一个接一个地处理它们。相反,来自服务器的响应是同时处理的。
我已经尝试在服务器中刷新输出流,但它什么也没做。我不明白发生了什么事。
我很感激任何帮助,谢谢。
EDIT1:可能是附加组件(客户端)没有刷新输入流,这可能吗?我在java服务器中使用out.println,所以'\n'必须刷新它的输出流并且网络库使用write.flush(),但是我没有看到任何其他的输入刷新。
EDIT2:这是我的代码:
exports.main = function() {
try {
// At first, we need a nsISocketTransportService
var transportService =
Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService);
// Try to connect to localhost:2222
var transport = transportService.createTransport(null, 0, "localhost", 6666, null);
var stream = transport.openInputStream(Ci.nsITransport.OPEN_UNBUFFERED,null,null);
var instream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
// Initialize
instream.init(stream);
var outstream = transport.openOutputStream(0, 0, 0);
var dataListener = {
onStartRequest: function(request, context){},
onStopRequest: function(request, context, status){
instream.close();
outstream.close();
},
onDataAvailable: function(request, context, inputStream, offset, count) {
var data = instream.read(count);
console.log(data);
},
};
var pump = Cc["@mozilla.org/network/input-stream-pump;1"]
.createInstance(Ci.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
pump.asyncRead(dataListener, null);
// Write data
console.log("hi1");
var outputData = "hi1\n";
outstream.write(outputData, outputData.length);
// Write data
console.log("hi2");
var outputData = "hi2\n";
outstream.write(outputData, outputData.length);
} catch (e){
console.log("Error" + e.result + ": " + e.message);
return e;
} return null;
};
所以,当我运行它时,我得到:
Client > hi1
Client > hi2
Server > bye1
Server > bye2
它应该是:
Client > hi1
Server > bye1
Client > hi2
Server > bye2