Exemplo n.º 1
0
        private void ReceiveCompleted(object obj, SocketAsyncEventArgs evt)
        {
            if (false == ClientSocket.Connected || 0 == evt.BytesTransferred)
            {
                //서버로 부터 데이터를 0받을시
                Reconnect();
                return;
            }
            //전체사이즈
            int Size  = evt.BytesTransferred;
            int CSize = BitConverter.ToUInt16(evt.Buffer, 0);

            //실제 사이즈와 적힌 사이즈가 다를경우 방지
            if (Size == CSize)
            {
                //패킷 생성
                GCHandle    Handle     = GCHandle.Alloc(evt.Buffer, GCHandleType.Pinned);
                JRecvPacket RecvPacket = (JRecvPacket)Marshal.PtrToStructure(Handle.AddrOfPinnedObject(), typeof(JRecvPacket));
                Handle.Free();
                RecvQue.Clear();
                int count = 0;
                //버퍼->큐에저장
                foreach (byte value in RecvPacket.RecvBuf)
                {
                    RecvQue.Enqueue(value);
                    count++;
                    if (RecvPacket.RecvBuf[count] == 0 && RecvPacket.RecvBuf[count - 1] == 0)
                    {
                        break;
                    }
                }
                //큐에 저장완료
                RecvSucces = true;
            }
            _Message = "Receive Check OKK";
            evt.SetBuffer(RecvBuf, 0, RecvBuf.Length);
            //비동기 재설정
            ClientSocket.ReceiveAsync(evt);
        }
Exemplo n.º 2
0
 //큐제거하고 반환
 public static byte Deque()
 {
     return(RecvQue.Dequeue());
 }