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); }
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); }
//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); }