コード例 #1
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            try
            {
                // 데이터 수신을 끝낸다.
                int received = obj.WorkingSocket.EndReceive(ar);

                // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
                if (received <= 0)
                {
                    obj.WorkingSocket.Close();
                    return;
                }

                // 텍스트로 변환한다.
                string text = Encoding.UTF8.GetString(obj.Buffer);
                Console.WriteLine(text);
                string[] ok = text.Split('=');
                ok[0] += "==";
                string hi = Decrypt256(ok[0], key);
                Console.WriteLine(hi);
                DataForm data = new DataForm();
                data = JsonConvert.DeserializeObject <DataForm>(hi);
                // : 기준으로 짜른다.
                // tokens[0] - 보낸 사람 ID
                // tokens[1] - 보낸 메세지

                // 텍스트박스에 추가해준다.
                // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
                // 따라서 대리자를 통해 처리한다.
                if (data.id.Equals("Server"))
                {
                    AppendText(txtHistory, string.Format("[공지사항이 등록되었습니다.] : {0}", data.text));
                    this.Invoke(new Action(delegate()
                    {
                        notificationBox.Text = data.text;
                    }));
                    // AppendNoti(notificationBox, data.text);
                }
                else
                {
                    AppendText(txtHistory, string.Format("[받음]{0} : {1}", data.id, data.text));
                }


                // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
                // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
                obj.ClearBuffer();

                // 수신 대기
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
            } catch
            {
            }
        }
コード例 #2
0
ファイル: ChatForm2.cs プロジェクト: HyunJungChoe/NW_Project
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            // 데이터 수신을 끝낸다.
            int received = obj.WorkingSocket.EndReceive(ar);

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            if (received <= 0)
            {
                obj.WorkingSocket.Disconnect(false);
                obj.WorkingSocket.Close();
                return;
            }

            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // : 기준으로 짜른다.
            // tokens[0] - 보낸 사람 ID
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split(':');
            if (tokens[0].Equals("id"))
            {// 새로 접속한 클라이언트가가 "id:자신의_ID" 전송함
                string id = tokens[1];
                AppendText(txtHistory, string.Format("[접속] ID : {0}", id));
            }
            if (tokens[0].Equals("JUM"))
            {
                string jum_id       = tokens[1];
                string jum          = tokens[2];
                string jum_listview = jum_id + ":" + jum;
                listView1.Items.Add(jum_listview);
            }
            else
            {
                string id  = tokens[0];
                string msg = tokens[1];
                AppendText(txtHistory, string.Format("[받음]{0}: {1}", id, msg));
            }
            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.


            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
コード例 #3
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            // 데이터 수신을 끝낸다.
            int received = obj.WorkingSocket.EndReceive(ar);

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            if (received <= 0)
            {
                obj.WorkingSocket.Close();
                return;
            }

            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // 0x01 기준으로 짜른다.
            // tokens[0] - 보낸 사람 IP
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split('\x01');
            string   ip     = tokens[0];
            string   msg    = tokens[1];

            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.
            AppendText(txtHistory, string.Format("[받음]{0}: {1}", ip, msg));

            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
コード例 #4
0
ファイル: Client.cs プロジェクト: E-nan/TCP-IP
        // 데이터 수신 함수
        void DataReceived(IAsyncResult ar)
        {
            AsyncObject obj  = (AsyncObject)ar.AsyncState;
            string      text = Encoding.UTF8.GetString(obj.Buffer);

            string[] arrDts = text.Split('\x01');
            this.Invoke(new MethodInvoker(delegate()
            {
                if (arrDts[0] == "1") // 전체 채팅
                {
                    AppendText(txtHistory, string.Format("[받음]{0}: {1}", arrDts[1], arrDts[2]));
                }
                else if (arrDts[0] == "2") // 그림방 채팅
                {
                    foreach (Form OpenForm in Application.OpenForms)
                    {
                        if (OpenForm.Text == "Drawing Catch ( " + crenick + " )")
                        {
                            pg.recvChat = text;
                            return;
                        }
                    }
                    pg     = new Paint_Game(this, Nick_label.Text);
                    recvDt = text;
                    pg.Show();
                }
                else if (arrDts[0] == "3") // 그림 받기
                {
                    int cnt = int.Parse(arrDts[3]);
                    foreach (Form OpenForm in Application.OpenForms)
                    {
                        if (OpenForm.Text == "Drawing Catch ( " + crenick + " )")
                        {
                            Byte[] Img       = Convert.FromBase64String(arrDts[2]);
                            TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
                            Bitmap Imgbit    = (Bitmap)tc.ConvertFrom(Img);
                            pg.recvPicture   = Imgbit;
                            return;
                        }
                    }
                    pg = new Paint_Game(this, Nick_label.Text);
                    pg.Show();
                }
                else if (arrDts[0] == "4")// ******************************************************************************************배열 1씩 더하ㅡㄴ중
                {
                    int cnt = int.Parse(arrDts[4]);
                    foreach (Form OpenForm in Application.OpenForms)
                    {
                        if (OpenForm.Text == "Drawing Catch ( " + crenick + " )")
                        {
                            if (arrDts[5] == "1" || arrDts[5] == "2")
                            {
                                pg.recvState = text;
                                return;
                            }
                            else
                            {
                                pg.recvStart = text;
                                return;
                            }
                        }
                    }
                    pg     = new Paint_Game(this, Nick_label.Text);
                    recvDt = text;
                    pg.Show();
                }
                else if (arrDts[0] == "5")
                {
                    int cnt = int.Parse(arrDts[5]);
                    foreach (Form OpenForm in Application.OpenForms)
                    {
                        if (OpenForm.Text == "Drawing Catch ( " + crenick + " )")
                        {
                            pg.recvCollect = text;
                            return;
                        }
                    }
                    pg     = new Paint_Game(this, mainSock.LocalEndPoint.ToString());
                    recvDt = text;
                    pg.Show();
                }
                else if (arrDts[0] == "6")
                {
                    int cnt = int.Parse(arrDts[5]);
                    foreach (Form OpenForm in Application.OpenForms)
                    {
                        if (OpenForm.Text == "Drawing Catch ( " + crenick + " )")
                        {
                            pg.recvEnd = text;
                            return;
                        }
                    }
                    pg     = new Paint_Game(this, Nick_label.Text);
                    recvDt = text;
                    pg.Show();
                }
                else if (arrDts[0] == "7")
                {
                    if (arrDts[1] == "1")
                    {
                        MessageBox.Show("사용 가능한 닉네임입니다!");
                        button2.Enabled = false;
                    }
                    else
                    {
                        MessageBox.Show("이미 사용중인 닉네임입니다!");
                    }
                }
                else if (arrDts[0] == "8") // 참여
                {
                    ClientList.Items.Clear();
                    for (int i = 2; i < arrDts.Length - 1; i++)
                    {
                        ClientList.Items.Add(arrDts[i]);
                    }
                    AppendText(txtHistory, string.Format("{0}", arrDts[1]));
                }
                else if (arrDts[0] == "9") // 퇴장
                {
                    ClientList.Items.Clear();
                    for (int i = 2; i < arrDts.Length - 1; i++)
                    {
                        ClientList.Items.Add(arrDts[i]);
                    }
                    AppendText(txtHistory, string.Format("{0}", arrDts[1]));
                }
                else if (arrDts[0] == "0") // 서버 종료
                {
                    mainSock.Disconnect(true);
                    ClientList.Items.Clear();
                    AppendText(txtHistory, string.Format("서버와의 연결이 종료되었습니다."));
                    ServerConnected = false;
                    obj.ClearBuffer();
                    mainSock.Close();
                    mainSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                    return;
                }
            }));
            obj.ClearBuffer();
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 50000, 0, DataReceived, obj);
        }
コード例 #5
0
ファイル: ChatForm.cs プロジェクト: BCSJH/C-language
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            // 데이터 수신을 끝낸다.
            int received = obj.WorkingSocket.EndReceive(ar);

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            if (received <= 0)
            {
                obj.WorkingSocket.Disconnect(false);
                obj.WorkingSocket.Close();
                return;
            }

            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // : 기준으로 짜른다.
            // tokens[0] - 보낸 사람 ID
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split(':');

            if (tokens[0].Equals("ID"))
            {// 새로 접속한 클라이언트가 "id:자신의_ID" 전송함
                string id = tokens[1];
                check_name.Add(id);

                AppendText(txtHistory, string.Format("[접속] ID: {0}", id));
            }
            else if (tokens[0].Equals("Server"))
            {
                string msg = tokens[1];
                AppendText(txtHistory, string.Format("[공지]: {0}", msg));

                string clientNumber = tokens[3];
                AppendText(txtHistory, string.Format("[참여자]: {0}", clientNumber));
            }
            else if (tokens[0].Equals("BR"))
            {
                string fromID = tokens[1];
                string msg    = tokens[2];
                AppendText(txtHistory, string.Format("[전체]{0}: {1}", fromID, msg));
            }
            else if (tokens[0].Equals("TO"))
            {
                string fromID      = tokens[1];
                string toID        = tokens[2];
                string msg         = tokens[3];
                string receivedMsg = "[FROM:" + fromID + "][TO:" + toID + "]" + msg;
                AppendText(txtHistory, receivedMsg);
            }

            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.


            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
コード例 #6
0
ファイル: ChatForm.cs プロジェクト: BCSJH/C-language
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            try
            {
                // 데이터 수신을 끝낸다.
                int received = obj.WorkingSocket.EndReceive(ar);
                if (received <= 0)
                {
                    obj.WorkingSocket.Disconnect(false);
                    obj.WorkingSocket.Close();
                    return;
                }
            }
            catch { }

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.


            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // : 기준으로 짜른다.
            // tokens[0] - 보낸 사람 ID
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split(':');
            if (tokens[0].Equals("ID"))
            {// 새로 접속한 클라이언트가 "id:자신의_ID" 전송함
                string id = tokens[1];
                check_name.Add(id);
                AppendText(txtHistory, string.Format("[접속] ID: {0}", id));
            }
            else if (tokens[0].Equals("Server"))
            {
                string msg = tokens[1];
                AppendText(txtHistory, string.Format("[공지]: {0}", msg));
            }
            else if (tokens[0].Equals("BR"))
            {
                string fromID = tokens[1];
                string msg    = tokens[2];
                AppendText(txtHistory, string.Format("[전체]{0}: {1}", fromID, msg));
            }
            else if (tokens[0].Equals("TO"))
            {
                string fromID      = tokens[1];
                string toID        = tokens[2];
                string msg         = tokens[3];
                string receivedMsg = "[FROM:" + fromID + "][TO:" + toID + "]" + msg;
                AppendText(txtHistory, receivedMsg);
            }

            //접속을 1명했다면 clientName : 1 : 1 :;
            //접속을 2명했다면 clientName : 2 : 1 : 2 :;

            if (tokens[0].Equals("PREO"))
            {
                string fromID = tokens[1];
                AppendText(txtHistory, string.Format("[정답]{0}:{1}:{2}", fromID, tokens[2], tokens[3]));
                button_color_change_O(Int32.Parse(tokens[2])); card_check.Add(Int32.Parse(tokens[2]));
                button_color_change_O(Int32.Parse(tokens[3])); card_check.Add(Int32.Parse(tokens[3]));
                if (card_check.Count == 16)
                {
                    byte[] bDts = Encoding.UTF8.GetBytes("ESC:");
                    mainSock.Send(bDts);
                }
            }
            if (tokens[0].Equals("PREX"))
            {
                string fromID = tokens[1];
                AppendText(txtHistory, string.Format("[오답]{0}:{1}:{2}", fromID, tokens[2], tokens[3]));
                button_color_change_X(Int32.Parse(tokens[2]));
                button_color_change_X(Int32.Parse(tokens[3]));
            }

            if (tokens[0].Equals("ClientName"))//listView에 추가하기
            {
                this.Invoke(new Action(delegate()
                {
                    listView1.Clear();
                    comboBox1.Items.Clear();
                    comboBox1.Items.Add("BR");
                }));
                clientNum = int.Parse(tokens[1]);//접속한 인원 수
                for (int i = 0; i < clientNum; i++)
                {
                    string clientName = tokens[2 + i];
                    this.Invoke(new Action(delegate()
                    {
                        listView1.Items.Add(clientName);
                    }));
                    this.Invoke(new Action(delegate()
                    {
                        comboBox1.Items.Add(clientName);
                    }));
                }
                this.Invoke(new Action(delegate()
                {
                    comboBox1.SelectedIndex = 0;
                }));
            }
            if (tokens[0].Equals("Card"))                //listView에 추가하기
            {
                for (int i = 0; i < 16; i++)             //(1~7까의 수 * 2) 14개
                {
                    int card = int.Parse(tokens[i + 1]); //카드 값
                    card_list.Add(card);
                }
                this.Invoke(new Action(delegate()
                {
                    button1.Text  = "" + card_list[0];
                    button2.Text  = "" + card_list[1];
                    button3.Text  = "" + card_list[2];
                    button4.Text  = "" + card_list[3];
                    button5.Text  = "" + card_list[4];
                    button6.Text  = "" + card_list[5];
                    button7.Text  = "" + card_list[6];
                    button8.Text  = "" + card_list[7];
                    button9.Text  = "" + card_list[8];
                    button10.Text = "" + card_list[9];
                    button11.Text = "" + card_list[10];
                    button12.Text = "" + card_list[11];
                    button13.Text = "" + card_list[12];
                    button14.Text = "" + card_list[13];
                    button15.Text = "" + card_list[14];
                    button16.Text = "" + card_list[15];
                }));
                Thread.Sleep(5000);
                this.Invoke(new Action(delegate()
                {
                    button1.Text  = "1";
                    button2.Text  = "2";
                    button3.Text  = "3";
                    button4.Text  = "4";
                    button5.Text  = "5";
                    button6.Text  = "6";
                    button7.Text  = "7";
                    button8.Text  = "8";
                    button9.Text  = "9";
                    button10.Text = "10";
                    button11.Text = "11";
                    button12.Text = "12";
                    button13.Text = "13";
                    button14.Text = "14";
                    button15.Text = "15";
                    button16.Text = "16";
                }));
            }
            if (tokens[0].Equals("ESC"))
            {
                AppendText(txtHistory, string.Format("[게임종료]"));
                if (MessageBox.Show("게임을 더 하시겠습니까?", "게임종료", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    //초-기-화
                    check_name.Clear();
                    check_card_number.Clear();
                    card_check.Clear();
                    card_list.Clear();
                    for (int i = 1; i < 17; i++)
                    {
                        button_color_change_X(i);
                    }
                    SendID();
                }
                else
                {
                    Application.Exit();
                }
            }
            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.


            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
コード例 #7
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;
            string      con = "님이 접속하였습니다.";

            // 데이터 수신을 끝낸다.
            try
            {
                int received = obj.WorkingSocket.EndReceive(ar);


                if (received <= 0)
                {
                    AppendText(txtHistory, string.Format("{0}님이 접속 해제하였습니다.", nameID));

                    obj.WorkingSocket.Disconnect(true);
                    obj.WorkingSocket.Close();
                    this.Close();
                    return;
                }
            }
            catch (ObjectDisposedException e)
            {
                Console.WriteLine("에러: " + e);
            }

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.


            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            //byte[] 수신

            // : 기준으로 짜른다.
            // tokens[0] - 보낸 사람 ID
            // tokens[1] - 보낸 메세지
            //tokens[2] - 받은 x좌표 값
            //tokens[3] - 받은 y좌표 값
            string[] tokens = text.Split(':');

            if (tokens[0].Equals("id"))
            {// 새로 접속한 클라이언트가가 "id:자신의_ID" 전송함
                id = tokens[1];
                AppendText(txtHistory, string.Format("'[접속] ID : {0}님이 접속하였습니다.'", id));
            }

            else
            {
                id         = tokens[0];
                msg        = tokens[1]; //인덱스 배열 범위 설정(서버)
                received_x = tokens[2];
                received_y = tokens[3];


                AppendText(txtHistory, string.Format("[받음]{0}: {1}", id, msg));
                Console.WriteLine(msg);
                Console.WriteLine(tokens[1]);
                Console.WriteLine(tokens[2]);
                Console.WriteLine(tokens[3]);

                AppendText(txtHistory, string.Format("[받음]{0}: x좌표{1}, y좌표{2}", id, received_x, received_y));
            }

            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.

            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
            try
            {
            }
            catch (IndexOutOfRangeException e)
            {
                Console.WriteLine("예외 오류: " + e.Message);
                Console.WriteLine("예외 라인: " + e.StackTrace);
            }
        }
コード例 #8
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            // 데이터 수신을 끝낸다.
            int received = obj.WorkingSocket.EndReceive(ar);

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            if (received <= 0)
            {
                obj.WorkingSocket.Disconnect(false);
                obj.WorkingSocket.Close();
                return;
            }

            // 텍스트로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // : 기준으로 짜른다.
            // tokens[0] - 보낸 사람 ID
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split(':');

            if (tokens[0].Equals("ID"))
            {// 새로 접속한 클라이언트가 "id:자신의_ID" 전송함
                string id = tokens[1];
                check_name.Add(id);
                AppendText(txtHistory, string.Format("[접속] ID: {0}", id));
            }
            else if (tokens[0].Equals("Server"))
            {
                string msg = tokens[1];
                AppendText(txtHistory, string.Format("[공지]: {0}", msg));
            }
            else if (tokens[0].Equals("BR"))
            {
                string fromID = tokens[1];
                string msg    = tokens[2];
                AppendText(txtHistory, string.Format("[전체]{0}: {1}", fromID, msg));
            }
            else if (tokens[0].Equals("TO"))
            {
                string fromID      = tokens[1];
                string toID        = tokens[2];
                string msg         = tokens[3];
                string receivedMsg = "[FROM:" + fromID + "][TO:" + toID + "]" + msg;
                AppendText(txtHistory, receivedMsg);
            }

            //접속을 1명했다면 clientName : 1 : 1 :;
            //접속을 2명했다면 clientName : 2 : 1 : 2 :;

            if (tokens[0].Equals("ClientName"))//listView에 추가하기
            {
                listView1.Clear();
                comboBox1.Items.Clear();
                comboBox1.Items.Add("BR");
                int clientNum = int.Parse(tokens[1]);//접속한 인원 수
                for (int i = 0; i < clientNum; i++)
                {
                    string clientName = tokens[2 + i];
                    listView1.Items.Add(clientName);
                    comboBox1.Items.Add(clientName);
                }
                comboBox1.SelectedIndex = 0;
            }
            if (tokens[0].Equals("Card"))                //listView에 추가하기
            {
                List <int> card_list = new List <int>(); //카트의 리스트
                for (int i = 0; i < 16; i++)             //(1~7까의 수 * 2) 14개
                {
                    int card = int.Parse(tokens[i + 1]); //카드 값
                    card_list.Add(card);

                    //AppendText(txtHistory, "card : " + tokens[i+1]);
                }

                button1.Text  = "" + card_list[0];
                button2.Text  = "" + card_list[1];
                button3.Text  = "" + card_list[2];
                button4.Text  = "" + card_list[3];
                button5.Text  = "" + card_list[4];
                button6.Text  = "" + card_list[5];
                button7.Text  = "" + card_list[6];
                button8.Text  = "" + card_list[7];
                button9.Text  = "" + card_list[8];
                button10.Text = "" + card_list[9];
                button11.Text = "" + card_list[10];
                button12.Text = "" + card_list[11];
                button13.Text = "" + card_list[12];
                button14.Text = "" + card_list[13];
                button15.Text = "" + card_list[14];
                button16.Text = "" + card_list[15];
                Thread.Sleep(5000);
                button1.Text  = "1";
                button2.Text  = "2";
                button3.Text  = "3";
                button4.Text  = "4";
                button5.Text  = "5";
                button6.Text  = "6";
                button7.Text  = "7";
                button8.Text  = "8";
                button9.Text  = "9";
                button10.Text = "10";
                button11.Text = "11";
                button12.Text = "12";
                button13.Text = "13";
                button14.Text = "14";
                button15.Text = "15";
                button16.Text = "16";
            }
            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.


            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }