Socket
From PlainOldWebserver
You want to write a server inside a server inside a browser? You should get your head checked. But since you got this far, I will sate your curiosity. This example sends a short message and exits. Do not try from another computer, since the loopback interface is used.
<?sjs
var serv = null;
var reader = {
onInputStreamReady: function(stream) {
alert("Ready for input");
}
}
var listener = {
onSocketAccepted: function(serv, transport){
try {
var is = transport.openInputStream(0,0,0);
var os = transport.openOutputStream(0,0,0);
if (is) {
is = is.QueryInterface(Components.interfaces.nsIAsyncInputStream);
is.asyncWait(reader, 0, 0, null);
var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance( Components.interfaces.nsIScriptableInputStream );
sis.init( is );
var output = sis.read( sis.available() );
}
if (os) {
var msg = "http://www.yahoo.com/\n";
os.write(msg,msg.length);
os.close();
is.close();
serv = null;
}
} catch (e) {
alert("Ex: "+e);
}
},
onDataAvailable: function(request, context, inputStream, offset, count) {
alert("onDataAvailable");
contentRead += scriptablestream.read(count);
},
onStopListening: function(serv, status) {
is.close();
os.close();
alert("Stopped listening ");
}
};
function startServer() {
try {
var sock = Components.classes["@mozilla.org/network/server-socket;1"];
serv = sock.createInstance();
serv = serv.QueryInterface(Components.interfaces.nsIServerSocket);
serv.init(7123,true,-1);
serv.asyncListen(listener);
alert("Server started. Type 'telnet localhost 7123'\n"+
" into the command line interface.");
} catch (e) {
alert("Ex: "+e);
}
}
startServer();
?>
Result:
$ telnet localhost 7123 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. http://www.yahoo.com/ Connection closed by foreign host.
