static void readCallback(IAsyncResult ar)
        {
            StateObject state   = (StateObject)ar.AsyncState;
            Socket      handler = state.workSocket;

            if (!IsSocketConnected(handler))
            {
                handler.Close();
                return;
            }

            int read = handler.EndReceive(ar);

            // Data was read from the client socket.
            if (read > 0)
            {
                state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, read));
                Console.WriteLine(state.sb.ToString());

                String str = state.sb.ToString();
                if (str.IndexOf("*") >= 0 && str.IndexOf("#") >= 0)
                {
                    String   strNoLineBreaks = Regex.Replace(str, @"\r\n?|\n", "");
                    String[] array           = strNoLineBreaks.Replace("*", "").Replace("#", "").Split(',');
                    String   sEpc            = array[0];
                    String   time            = array[1];
                    String   android_id      = array[2];
                    String   ckpt_name       = array[3];
                    String   position        = array[4];
                    String   isChipCode      = array[5]; // chip code = 1; bib number = 0;

                    Boolean isBibNo = (isChipCode.Equals("0")) ? true : false;

                    Tag tag = new Tag(sEpc + time + android_id + ckpt_name + position, sEpc, time, android_id, isBibNo);


                    int key = form.ReceiveData(tag, ckpt_name);
                    if (key >= 0)
                    {
                        byte[] byData = System.Text.Encoding.ASCII.GetBytes(position);
                        handler.Send(byData);
                        handler.Close();

                        form.EpcMapping(key, tag);
                    }
                    else
                    {
                        byte[] byData = System.Text.Encoding.ASCII.GetBytes("-1");
                        handler.Send(byData);
                        handler.Close();
                    }
                }
                else
                {
                    handler.BeginReceive(state.buffer, 0, _bufferSize, 0, new AsyncCallback(readCallback), state);
                }
            }
            else
            {
                handler.Close();
            }
        }