ServerSocketX: Difference between revisions
Jump to navigation
Jump to search
(Created page with "Implementation of a basic "server" socket, default is a HTTP 0.9[http://www.w3.org/Protocols/HTTP/AsImplemented.html] web server implementation on port 8080. A running instanc...") |
No edit summary |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Implementation of a basic "server" socket, default is a HTTP 0.9[http://www.w3.org/Protocols/HTTP/AsImplemented.html] web server implementation on port 8080. A running instance of this server generates a HTML HelloWorld page at http://localhost:8080 | A [[ßêãµ]] Project | ||
Implementation of a basic "server" socket in AS3[http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/ServerSocket.html], default is a HTTP 0.9[http://www.w3.org/Protocols/HTTP/AsImplemented.html] web server implementation on port 8080. A running instance of this server generates a HTML HelloWorld page at http://localhost:8080 | |||
Request from client: | |||
<pre> | |||
GET / HTTP/1.1 | |||
</pre> | |||
Response from Server: | |||
<pre> | |||
<!DOCTYPE html> | |||
<html> | |||
<head> | |||
<title>Hello HTML</title> | |||
</head> | |||
<body> | |||
<p>Hello World!</p> | |||
</body> | |||
</html> | |||
</pre> | |||
Source Code: | |||
<pre> | |||
package | |||
{ | |||
import flash.display.Sprite; | |||
import flash.net.ServerSocket; | |||
import flash.events.ServerSocketConnectEvent; | |||
import flash.net.Socket; | |||
import flash.events.ProgressEvent; | |||
import flash.events.IOErrorEvent; | |||
import flash.events.Event; | |||
import flash.events.OutputProgressEvent; | |||
public class ServerSocketX extends Sprite | |||
{ | |||
private var serverSocket:ServerSocket; | |||
private var clientSockets:Object; | |||
public function ServerSocketX() | |||
{ | |||
clientSockets = []; | |||
serverSocket = new ServerSocket(); | |||
serverSocket.addEventListener(Event.CONNECT, connectHandler); | |||
serverSocket.addEventListener(Event.CLOSE, onClose); | |||
serverSocket.bind(8080, "127.0.0.1"); | |||
serverSocket.listen(); | |||
trace("Server Socket listenting."); | |||
} | |||
private function connectHandler(e:ServerSocketConnectEvent):void | |||
{ | |||
var socket:Socket = e.socket as Socket; | |||
clientSockets[socket.remoteAddress + socket.remotePort] = socket; | |||
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); | |||
socket.addEventListener(Event.CLOSE, onClientClose); | |||
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError); | |||
socket.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, progressHandler); | |||
trace("Connect: " + socket.remoteAddress + ":" + socket.remotePort); | |||
} | |||
private function closeSocket(socket:Socket):void | |||
{ | |||
trace("Close: " + socket.remoteAddress + ":" + socket.remotePort); | |||
socket.removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); | |||
socket.removeEventListener(Event.CLOSE, onClientClose); | |||
socket.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); | |||
socket.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, progressHandler); | |||
clientSockets[socket.remoteAddress + socket.remotePort] = null; | |||
if (socket.connected) | |||
socket.close(); | |||
socket = null; | |||
} | |||
private function progressHandler(e:OutputProgressEvent):void | |||
{ | |||
if (e.bytesPending == 0) | |||
{ | |||
var socket:Socket = e.target as Socket; | |||
closeSocket(socket); | |||
} | |||
} | |||
private function socketDataHandler(e:ProgressEvent):void | |||
{ | |||
var socket:Socket = e.target as Socket; | |||
var msg:String = socket.readUTFBytes(socket.bytesAvailable); | |||
trace(socket.remoteAddress + ":" + socket.remotePort + "<" + msg.substr(0, msg.indexOf("\n"))); | |||
// check for http GET / | |||
if (msg.substr(0, 6) == "GET / ") | |||
{ | |||
socket.writeUTFBytes("<!DOCTYPE html><html><head><title>Hello HTML</title></head><body><p>Hello World!</p></body></html>"); | |||
socket.flush(); | |||
} | |||
else | |||
{ | |||
closeSocket(socket); | |||
} | |||
} | |||
private function onClientClose(e:Event):void | |||
{ | |||
var socket:Socket = e.target as Socket; | |||
closeSocket(socket); | |||
} | |||
private function onIOError(e:IOErrorEvent):void | |||
{ | |||
trace("ERROR: " + e.text); | |||
} | |||
private function onClose(e:Event):void | |||
{ | |||
trace("Server socket closed."); | |||
} | |||
} | |||
} | |||
</pre> |
Latest revision as of 18:55, 7 April 2013
A ßêãµ Project
Implementation of a basic "server" socket in AS3[1], default is a HTTP 0.9[2] web server implementation on port 8080. A running instance of this server generates a HTML HelloWorld page at http://localhost:8080
Request from client:
GET / HTTP/1.1
Response from Server:
<!DOCTYPE html> <html> <head> <title>Hello HTML</title> </head> <body> <p>Hello World!</p> </body> </html>
Source Code:
package { import flash.display.Sprite; import flash.net.ServerSocket; import flash.events.ServerSocketConnectEvent; import flash.net.Socket; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; import flash.events.Event; import flash.events.OutputProgressEvent; public class ServerSocketX extends Sprite { private var serverSocket:ServerSocket; private var clientSockets:Object; public function ServerSocketX() { clientSockets = []; serverSocket = new ServerSocket(); serverSocket.addEventListener(Event.CONNECT, connectHandler); serverSocket.addEventListener(Event.CLOSE, onClose); serverSocket.bind(8080, "127.0.0.1"); serverSocket.listen(); trace("Server Socket listenting."); } private function connectHandler(e:ServerSocketConnectEvent):void { var socket:Socket = e.socket as Socket; clientSockets[socket.remoteAddress + socket.remotePort] = socket; socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); socket.addEventListener(Event.CLOSE, onClientClose); socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError); socket.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, progressHandler); trace("Connect: " + socket.remoteAddress + ":" + socket.remotePort); } private function closeSocket(socket:Socket):void { trace("Close: " + socket.remoteAddress + ":" + socket.remotePort); socket.removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); socket.removeEventListener(Event.CLOSE, onClientClose); socket.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); socket.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, progressHandler); clientSockets[socket.remoteAddress + socket.remotePort] = null; if (socket.connected) socket.close(); socket = null; } private function progressHandler(e:OutputProgressEvent):void { if (e.bytesPending == 0) { var socket:Socket = e.target as Socket; closeSocket(socket); } } private function socketDataHandler(e:ProgressEvent):void { var socket:Socket = e.target as Socket; var msg:String = socket.readUTFBytes(socket.bytesAvailable); trace(socket.remoteAddress + ":" + socket.remotePort + "<" + msg.substr(0, msg.indexOf("\n"))); // check for http GET / if (msg.substr(0, 6) == "GET / ") { socket.writeUTFBytes("<!DOCTYPE html><html><head><title>Hello HTML</title></head><body><p>Hello World!</p></body></html>"); socket.flush(); } else { closeSocket(socket); } } private function onClientClose(e:Event):void { var socket:Socket = e.target as Socket; closeSocket(socket); } private function onIOError(e:IOErrorEvent):void { trace("ERROR: " + e.text); } private function onClose(e:Event):void { trace("Server socket closed."); } } }