this is the adobe air server script you can host if you forward port 7777,you can probably take from that script to make it work for you if you read it abit and start the right functions.

PHP Code:
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.ServerSocketConnectEvent;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.net.FileReference;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;

var 
serverSocket:ServerSocket = new ServerSocket();
var 
clientSocket:Socket;
var 
clientObject = {};
var 
pid:Number=0;
var 
_function:String;
var 
completeString:String;
var 
parsedString:String;










var 
fr:FileReference = new FileReference();
var 
FileName:URLLoader;
var 
f:File = new File();
var 
fs:FileStream;

var 
fr2:FileReference = new FileReference();
var 
FileName2:URLLoader;
var 
f2:File = new File();
var 
fs2:FileStream;
var 
memberPackages=["001",28,"Digital Goods 001",31,"Digital Goods 002",93,"Digital Goods 003",365];
function 
register_account(a,b){
if(
a!=undefined&&b!=undefined){
FileName=new URLLoader();
f=File.documentsDirectory;
f=f.resolvePath("storage_lock/paypal/"+a+".txt");
if(
f.exists){
if(
b.split("mc_gross=")[1].split('.')[0]=="-0"&&f.size!=0){
fs = new FileStream();
fs.open(fFileMode.WRITE);
fs.writeUTFBytes("");
fs.close();
trace("negative");
MovieClip(root.parent).modify_membership_for(memberPackages[memberPackages.indexOf(b.split("item_number=")[1].split("~")[0])+1],b.split("custom=")[1].split("~")[0],true)
}
}else{
fs = new FileStream();
fs.open(fFileMode.WRITE);
fs.writeUTFBytes(b);
fs.close();
if(
b.split("custom=")[1].split("~")[0]!=b){
MovieClip(root.parent).modify_membership_for(memberPackages[memberPackages.indexOf(b.split("item_number=")[1].split("~")[0])+1],b.split("custom=")[1].split("~")[0],false)
}
}
//do something at end?
}else{
}
}



function 
load_new_player(a,b){
trace("Current port set");
currentPort=a;
bind();
}
var 
generatedNumber:String;
function 
randomRange(minNum:Number,maxNum:Number):Number{
return (
Math.floor(Math.random()*(maxNum minNum 1))+minNum);
}



function 
onConnection(e:ServerSocketConnectEvent){
pid++;
clientSocket e.socket;
clientSocket.addEventListener(ProgressEvent.SOCKET_DATAonClientSocketData);
clientObject[(clientSocket.remoteAddress).toString()+":"+(clientSocket.remotePort).toString()] = {"pid":pidconnection:e.socket"msg_num":0,paypal_vars:""};
log("in connected" pid + (clientSocket.remoteAddress).toString() + "_" +(clientSocket.remotePort).toString());
}

var 
msg_num:Number=0;
var 
nullByte:String="";
var 
temp_name="";
var 
error_log="";
var 
ipn_vars:Array =new Array();
var 
_functionList = {"name":null,"register":null,"path":null,"tokens2":null,"mapsize":null,"loadmap":null};
function 
onClientSocketData(e:ProgressEvent){
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].msg_num++;
var 
buffer:ByteArray = new ByteArray();
var 
temp_Bytes:ByteArray= new ByteArray();
e.currentTarget.readBytes(buffer0e.currentTarget.bytesAvailable);
try{
completeString buffer.toString();
for(var 
bu=0;bu<completeString.toString().split(nullByte).length;bu++){
parsedString=completeString.toString().split(nullByte)[bu];


if((
e.currentTarget.remoteAddress).toString()=="173.0.81.1"){
_function parsedString.toString().split(";")[0];
ipn_vars=[];
_function=_function.toString().split("\n")[_function.toString().split("\n").length-1];
ipn_vars=_function.toString().split("&");

for(var 
i=0;i<ipn_vars.length;i++){
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars+=ipn_vars[i]+'~';
}
if(
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("parent_txn_id=")[1]!=undefined){
register_account(clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("parent_txn_id=")[1].split('~')[0]+"_"+clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("first_name=")[1].split('~')[0],clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars);
}else{
register_account(clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("txn_id=")[1].split('~')[0]+"_"+clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("first_name=")[1].split('~')[0],clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars);
}
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].connection.writeUTFBytes("http 200"  +   nullByte);
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].connection.flush(); 
}




}
}catch(
e:Error){
}


if((
e.currentTarget.remoteAddress).toString()=="173.0.81.1"){
trace("closed");
e.currentTarget.flush(); 
delete clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()];
e.currentTarget.close();
}

if(
msg_num==0){
trace("null byte ready");
nullByte=buffer.toString();
msg_num++;
socket.close();
MovieClip(root.parent).serverReply("Hey how do you do, I have opened port: " "*"+currentPort+"*" " for you.");
}
if(
_functionList[_function] != null){
log("out end " clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].pid);
delete clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()];
e.currentTarget.close();
}
}


var 
socket:XMLSocket;
var 
currentPort:Number=7777;
function 
bind(){
if(
serverSocket.bound){
serverSocket.close();
serverSocket = new ServerSocket();
}
serverSocket.bind(currentPort);
serverSocket.addEventListener(ServerSocketConnectEvent.CONNECTonConnection);
serverSocket.listen();
log("socket ready @: " serverSocket.localAddress ":" serverSocket.localPort);
//null byte creator//
socket = new XMLSocket();
socket.connect("127.0.0.1",currentPort);//107.205.162.59              
socket.send("");
}



function 
broadcast(a){
for(var 
od in clientObject){
if(
clientObject[od].msg_num && clientObject[od].connection.connected){
trace("broadcasting " +a);
clientObject[od].connection.writeUTFBytes(a  +   nullByte);
clientObject[od].connection.flush(); 
}
}
}


function 
log(a){
trace(a);