Socket

From PlainOldWebserver

Jump to: navigation, search

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.
Personal tools
Navigation