socket的三次握手

package
{
    import flash.display.Sprite;
    import flash.events.ProgressEvent;
    import flash.net.Socket;
    import flash.utils.ByteArray;
    /**
     *
     * 三次握手連接socket
     * 來源socket編程
     */
    public class SocketHandshake extends Sprite
    {
        public const DETERMINE_VERSION:int = 0;
        public const RECEIVE_CHALLENGE:int = 1;
        public const NORMAL:int = 2;
        private var stateMap:Object;
        private var currentState:int;
        private var socket:Socket;
        public function SocketHandshake( )
        {
            stateMap = new Object( );
            stateMap[DETERMINE_VERSION] = readVersion;
            stateMap[RECEIVE_CHALLENGE] = readChallenge;
            stateMap[NORMAL] = readNormalProtocol;
            currentState = DETERMINE_VERSION;
            socket = new Socket( );
            socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
            socket.connect( "localhost", 9000 );
            trace(currentState);
        }
        private function onSocketData( event:ProgressEvent ):void
        {
            trace(currentState);
            var processFunc:Function = stateMap[currentState];
            processFunc( );
        }
        private function readVersion( ):void
        {

            try
            {
                var version:int = socket.readInt();
                trace(version);
            }
            catch (error:Error)
            {
                trace("error:"+error);
            }
            currentState = RECEIVE_CHALLENGE;
            socket.writeInt( version );
            socket.flush( );
        }
        private function readChallenge( ):void
        {
            var bytes:ByteArray = new ByteArray( );
            socket.readBytes( bytes, 0, 8 );
            currentState = NORMAL;
            socket.writeBytes( bytes );
            socket.flush( );
        }
        private function readNormalProtocol( ):void
        {
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章