Esempio n. 1
0
        private void OnAcceptCallback(object _obj, SocketAsyncEventArgs _acceptArgs)
        {
            Console.WriteLine("Client Connect");
            //-------------------------------------
            // 접속은 다시 대기로 돌리기....
            //-------------------------------------
            Socket _clientSocket = _acceptArgs.AcceptSocket;

            _acceptArgs.AcceptSocket = null;
            acceptSocket.AcceptAsync(acceptArgs);


            //-------------------------------------
            // 신규유저 연결버퍼 생성...
            //-------------------------------------
            CUserToken _token = new CUserToken(_clientSocket, OnReceiveCallback, OnSendCallback);

            listUser.Add(_token);

            //신규 유저들 받기대기로 돌리기...
            _token.socket.ReceiveAsync(_token.receiveArgs);
        }
Esempio n. 2
0
        private void OnReceiveCallback(object _obj, SocketAsyncEventArgs _receiveArgs)
        {
            //받은 유저Socket + 데이타 빼기.
            CUserToken           _token    = _receiveArgs.UserToken as CUserToken;
            Socket               _socket   = _token.socket;
            SocketAsyncEventArgs _sendArgs = _token.sendArgs;

            //받은 데이타만 빼내기...
            int _transferred = _receiveArgs.BytesTransferred;

            byte[] _buffer = new byte[_transferred];
            Array.Copy(_receiveArgs.Buffer, _receiveArgs.Offset, _buffer, 0, _transferred);
            _token.socket.ReceiveAsync(_token.receiveArgs);

            sendpack += _transferred;
            //-------------------------------------
            //
            //-------------------------------------
            string _text = Encoding.ASCII.GetString(_buffer);
            //Console.WriteLine("Text received:" + _text);

            string _respone = string.Empty;

            if (_text.ToLower().Equals("get time"))
            {
                //Console.WriteLine(" > OK");
                _respone = DateTime.Now.ToLongDateString();
            }
            else
            {
                //Console.WriteLine(" > No");
                _respone = "Invalid Request";
            }
            byte[] _data = Encoding.ASCII.GetBytes(_respone);
            Array.Copy(_data, 0, _sendArgs.Buffer, _sendArgs.Offset, _data.Length);
            _sendArgs.SetBuffer(_sendArgs.Offset, _data.Length);
            _socket.SendAsync(_sendArgs);
        }
Esempio n. 3
0
        //object -> Socket(Client Socket)
        //_receiveArgs - CUserToken - _sendArgs
        private void OnReceiveCallback(object _obj, SocketAsyncEventArgs _receiveArgs)
        {
            //클라이언트로부터 데이타 받음....
            CUserToken           _token    = _receiveArgs.UserToken as CUserToken;
            Socket               _socket   = _token.socket;
            SocketAsyncEventArgs _sendArgs = _token.sendArgs;

            //-----------------------------------------
            //받은 데이타 빼내기... > 재등록...
            //-----------------------------------------
            int _transferred = _receiveArgs.BytesTransferred;

            byte[] _buffer = new byte[_transferred];
            Array.Copy(_receiveArgs.Buffer, _receiveArgs.Offset, _buffer, 0, _transferred);
            _socket.ReceiveAsync(_receiveArgs);
            //Console.WriteLine("_receiveArgs .Offset:{0}, _obj:{1}, Same:{2}", _receiveArgs.Offset, _obj, ((Socket)_obj == _token.socket);
            //Console.WriteLine("_receiveArgs Same:{0} / {1}", ((Socket)_obj == _token.socket), (_token.socket == acceptSocket));

            //-----------------------------------------
            // 데이타 보내기 > 전송등록....
            //-----------------------------------------
            string _text    = Encoding.ASCII.GetString(_buffer);
            string _respone = string.Empty;

            if (_text.ToLower().Equals("get time"))
            {
                _respone = DateTime.Now.ToLongDateString();
            }
            else
            {
                _respone = "Echo:" + _text;
            }
            byte[] _data = Encoding.ASCII.GetBytes(_respone);
            Array.Copy(_data, 0, _sendArgs.Buffer, _sendArgs.Offset, _data.Length);
            _sendArgs.SetBuffer(_sendArgs.Offset, _data.Length);
            _socket.SendAsync(_sendArgs);
        }