示例#1
0
    void getHeader()
    {
        mainSock.Receive(ao.Buffer, 0, HEADER_SIZE, SocketFlags.None);

        string jsonData = Encoding.UTF8.GetString(ao.Buffer);

        // Debug.Log("[받음]" + jsonData);

        // UID:000,LEN:016
        if (jsonData.StartsWith("UID"))
        {
            // Debug.Log("Header");
            if (UID == -1)
            {
                UID = Convert.ToInt32(jsonData.Split(',')[0].Split(':')[1]);
                // Debug.Log("UID : " + UID);
            }

            int BODY_SIZE = Convert.ToInt32(jsonData.Split(',')[1].Split(':')[1]);
            ao.ClearBuffer();
            if (BODY_SIZE != 0)
            {
                getBody(BODY_SIZE);
            }
            return;
        }
    }
示例#2
0
        public void ReceivedFromServer(IAsyncResult ar)
        {
            try
            {
                AsyncObject obj = (AsyncObject)ar.AsyncState;

                int numReceived = obj.WorkingSocket.EndReceive(ar);

                if (numReceived <= 0)
                {
                    obj.WorkingSocket.Close();
                    return;
                }

                string txt = Encoding.UTF8.GetString(obj.Buffer).Trim('\0');

                System.Console.WriteLine("Messege From Server : " + txt);

                obj.ClearBuffer();

                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, obj.BufferSize, SocketFlags.None, ReceivedFromServer, obj);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
            }
        }
示例#3
0
        /*public void DataReceived(IAsyncResult ar)
         * {
         *  AsyncObject obj = (AsyncObject)ar.AsyncState;
         *  try
         *  {
         *      string text = Encoding.UTF8.GetString(obj.Buffer);
         *      string[] tokens = text.Split('~');
         *      if (tokens.Length == 1) return;
         *      MessageBox.Show(tokens[0]);
         *      MessageBox.Show(tokens[1]);
         *      MessageBox.Show(tokens[2]);
         *      // 수신 받은거 처리 후
         *      obj.ClearBuffer();
         *      //obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, SocketFlags.None, DataReceived, obj);
         *      obj.WorkingSocket.Receive(obj.Buffer);
         *  }
         *  catch (Exception e)
         *  {
         *      MessageBox.Show(e.ToString());
         *
         *  }
         * }*/

        public void SendData(string[] attribute)
        {
            try
            {
                AsyncObject ao = new AsyncObject(4096);
                ao.WorkingSocket = client;
                int    size = attribute.Length;
                string Data = "";
                for (int i = 0; i < size; i++)
                {
                    Data += attribute[i];
                    Data += "/";
                }
                byte[] bD = Encoding.UTF8.GetBytes(Data + "\r\n");
                ao.WorkingSocket.Send(bD);
                ao.WorkingSocket.Receive(ao.Buffer);
                string   text   = Encoding.UTF8.GetString(ao.Buffer);
                string[] tokens = text.Split('~');
                if (tokens.Length == 1)
                {
                    return;
                }
                MessageBox.Show(tokens[0]);
                MessageBox.Show(tokens[1]);
                MessageBox.Show(tokens[2]);
                // 수신 받은거 처리 후
                ao.ClearBuffer();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
示例#4
0
        public void DataReceived(IAsyncResult ar)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;
            //IAsyncResult
            int received = obj.WorkingSocket.EndReceive(ar);

            //받은 데이터가 없을때
            if (received <= 0)
            {
                obj.WorkingSocket.Close();
                return;
            }
            //받은걸 UTF8로 인코딩
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // 0x01 기준으로 짜른다. 보낼떄 "0x01"을 데이터 사이에 집어 넣어서
            // tokens[0] - 보낸 사람 IP
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split('#');
            string   ip     = tokens[0];
            string   msg    = tokens[1];


            Appendtext(serverF.serverForm.txtLog, string.Format("[server에게 받음]{0} : {1}", ip, msg));

            //데이터 수신 후 버퍼 비워주기
            obj.ClearBuffer();
            //다시 수신대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
示例#5
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);

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

            // 텍스트박스에 추가해준다.
            // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
            // 따라서 대리자를 통해 처리한다.
            AppendText(txtHistory, string.Format("[받음]{0}: {1}", id, msg));
            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();
            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
示例#6
0
        /*public void DataReceived(IAsyncResult ar)
         * {
         *  AsyncObject obj = (AsyncObject)ar.AsyncState;
         *  try
         *  {
         *      string text = Encoding.UTF8.GetString(obj.Buffer);
         *      string[] tokens = text.Split('~');
         *      if (tokens.Length == 1) return;
         *      MessageBox.Show(tokens[0]);
         *      MessageBox.Show(tokens[1]);
         *      MessageBox.Show(tokens[2]);
         *      // 수신 받은거 처리 후
         *      obj.ClearBuffer();
         *      //obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, SocketFlags.None, DataReceived, obj);
         *      obj.WorkingSocket.Receive(obj.Buffer);
         *  }
         *  catch (Exception e)
         *  {
         *      MessageBox.Show(e.ToString());
         *  }
         * }*/

        public void SendData(string[] attribute)
        {
            try
            {
                AsyncObject ao = new AsyncObject(4096);
                ao.WorkingSocket = client;
                int    size = attribute.Length;
                string Data = "";
                for (int i = 0; i < size; i++)
                {
                    Data += attribute[i];
                    Data += "/";
                }
                byte[] bD = Encoding.UTF8.GetBytes(Data + "\r\n");
                ao.WorkingSocket.Send(bD);
                ao.WorkingSocket.Receive(ao.Buffer);
                string   text   = Encoding.UTF8.GetString(ao.Buffer);
                string[] tokens = text.Split('~');
                if (tokens.Length == 1)
                {
                    return;
                }
                if (tokens[0] == "A")
                {
                    PredictUserControlViewModel.instance.Arank = "yes";
                }
                else if (tokens[0] == "B")
                {
                    PredictUserControlViewModel.instance.Brank = "yes";
                }
                else if (tokens[0] == "C")
                {
                    PredictUserControlViewModel.instance.Crank = "yes";
                }
                else
                {
                    PredictUserControlViewModel.instance.Drank = "yes";
                }
                PredictUserControlViewModel.instance.ASR   = tokens[1].ToString();
                PredictUserControlViewModel.instance.ASSR  = tokens[2].ToString();
                PredictUserControlViewModel.instance.ASSNR = tokens[3].ToString();
                PredictUserControlViewModel.instance.AFR   = tokens[4].ToString();
                PredictUserControlViewModel.instance.SMR   = tokens[5].ToString();
                //0번 predict 1번 asr 2번 assr 3번 assnr 4번 videoChk
                // 수신 받은거 처리 후

                ao.ClearBuffer();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
示例#7
0
        public 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('#');
            string   ip     = tokens[0];
            string   msg    = tokens[1];
            string   nick   = tokens[2];

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

            // for을 통해 "역순"으로 클라이언트에게 데이터를 보낸다.
            for (int i = connectedClient.Count - 1; i >= 0; i--)
            {
                Socket socket = connectedClient[i];
                if (socket != obj.WorkingSocket)
                {
                    try { socket.Send(obj.Buffer); }
                    catch
                    {
                        // 오류 발생하면 전송 취소하고 리스트에서 삭제한다.
                        try { socket.Dispose(); } catch { }
                        connectedClient.RemoveAt(i);
                    }
                }
            }

            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
示例#8
0
        void ReceiveHandler(IAsyncResult ar)
        {
            AsyncObject asyncObject = (AsyncObject)ar.AsyncState;
            int         recvBytes   = 0;

            try
            {
                recvBytes = asyncObject.WorkingSocket.EndReceive(ar);
                if (recvBytes > 0)
                {
                    Byte[] msgByte = new Byte[recvBytes];
                    Array.Copy(asyncObject.Buffer, msgByte, recvBytes);
                    AppendText(outputMsg, string.Format("{0} : {1}", asyncObject.WorkingSocket.RemoteEndPoint, Encoding.Unicode.GetString(msgByte)));
                    foreach (Socket client in clients)
                    {
                        if (client != asyncObject.WorkingSocket)
                        {
                            client.Send(msgByte);
                        }
                    }
                }
                asyncObject.ClearBuffer();
                asyncObject.WorkingSocket.BeginReceive(asyncObject.Buffer, 0, asyncObject.Buffer.Length, SocketFlags.None, ReceiveHandler, asyncObject);
            }
            catch (SocketException exception)
            {
                if (exception.ErrorCode == 10054)
                {
                    AppendText(outputMsg, string.Format("{0}와의 연결이 끊겼습니다.", asyncObject.WorkingSocket.RemoteEndPoint));
                    foreach (Socket client in clients)
                    {
                        if (client == asyncObject.WorkingSocket)
                        {
                            clients.Remove(client);
                            break;
                        }
                    }
                    serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
                    AppendText(outputMsg, "다른 클라이언트를 기다립니다.");
                }
                else
                {
                    AppendText(outputMsg, string.Format("수신에 실패하였습니다.\n{0}", exception.Message));
                    return;
                }
            }
        }
示例#9
0
        private void DataReceive(IAsyncResult ar)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            int received = obj.WorkingSocket.EndReceive(ar);

            string txt = Encoding.UTF8.GetString(obj.Buffer).Trim('\0');
            //txt = txt.Trim("\0");
            string msg = "From {" + obj.id + "} Client:" + txt;

            System.Console.WriteLine(msg);
            byte[] sendMsg = Encoding.UTF8.GetBytes(obj.id + " ACK\n");
            obj.WorkingSocket.Send(sendMsg);
            obj.ClearBuffer();

            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 1024, 0, DataReceive, obj);
        }
示例#10
0
        void DataReceived(IAsyncResult ar)
        {
            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);

                string[] tokens = text.Split(':');            //기준
                string   id     = Decrypt256(tokens[0], key); //보낸사람 ID

                string[] message;
                message     = tokens[1].Split('=');
                message[0] += "==";
                string msg = Decrypt256(message[0], key);//메세지
                // 텍스트박스에 추가해준다.
                // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
                // 따라서 대리자를 통해 처리한다.
                //전송 시간 표시 추가.
                AppendText(txtHistory, string.Format(DateTime.Now.ToString("HH:mm:ss") + "[받음]{0}: {1}", id, msg));

                // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
                // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
                obj.ClearBuffer();
                // 수신 대기
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0,
                                               DataReceived, obj);
            }
            catch//오류시 폼 종료
            {
                //Application.Exit();
            }
        }
示例#11
0
        /// <summary>
        /// 데이터 수신 Callback
        /// </summary>
        /// <param name="ar"></param>
        private void ReceivedCallback(IAsyncResult ar)
        {
            // BeginReceive에서 수신한 데이터를 AsyncObject로 변환
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            try
            {
                int received = obj.WorkingSocket.EndReceive(ar);

                // 수신한 데이터가 없으면 종료
                if (received <= 0)
                {
                    obj.WorkingSocket.Close();
                    return;
                }

                // 수신한 데이터를 텍스트로 변환
                string txt = Encoding.UTF8.GetString(obj.Buffer);

                // 0x01 기준으로 분할
                string[] tokens = txt.Split('\x01');
                string   ip     = tokens[0];
                string   msg    = tokens[1];

                // 로그 delegate로 전달
                AppendText(string.Format("[RECV] {0}: {1}", ip, msg));

                // 버퍼를 비운 뒤, 다시 서버 수신 대기
                obj.ClearBuffer();
                this.Receive(ar);
            }
            catch (SocketException se)
            {
                if (se.SocketErrorCode == SocketError.ConnectionReset)
                {
                    this.StartClient(clientIp, clientPort);
                }
            }
        }
示例#12
0
        void ReceiveHandler(IAsyncResult ar)
        {
            AsyncObject asyncObject = (AsyncObject)ar.AsyncState;
            int         recvBytes   = 0;

            try
            {
                recvBytes = asyncObject.WorkingSocket.EndReceive(ar);
                if (recvBytes > 0)
                {
                    Byte[] msgByte = new Byte[recvBytes];
                    Array.Copy(asyncObject.Buffer, msgByte, recvBytes);
                    AppendText(outputMsg, string.Format("받음: {0}", Encoding.Unicode.GetString(msgByte)));
                }
                asyncObject.ClearBuffer();
                asyncObject.WorkingSocket.BeginReceive(asyncObject.Buffer, 0, asyncObject.Buffer.Length, SocketFlags.None, ReceiveHandler, asyncObject);
            }
            catch (Exception exception)
            {
                MessageBox.Show("Receive 중 문제가 발생하였습니다.\n" + exception.Message);
                return;
            }
        }
示例#13
0
    private void StreamReceive(IAsyncResult ar)
    {
        lock (_lock)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            try
            {
                int len = obj.WorkingSocket.EndReceive(ar);

                for (int i = 0; i < len; i++)
                {
                    _byteList.Add(obj.Buffer[i]);
                }
                obj.ClearBuffer();
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, StreamReceive, obj);
            }
            catch (Exception ex)
            {
            }

            ProcessStreamByte();
        }
    }
示例#14
0
        public void DataReceived(IAsyncResult ar)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            try
            {
                string   text   = Encoding.UTF8.GetString(obj.Buffer);
                string[] tokens = text.Split('~');
                if (tokens.Length == 1)
                {
                    return;
                }
                MessageBox.Show(tokens[0]);
                MessageBox.Show(tokens[1]);
                MessageBox.Show(tokens[2]);
                // 수신 받은거 처리 후
                obj.ClearBuffer();
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, SocketFlags.None, DataReceived, obj);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
示例#15
0
        // MARK - 서버로부터 메세지 수신
        void DataReceived(IAsyncResult ar)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            obj.WorkingSocket.EndReceive(ar);

            string text = Encoding.UTF8.GetString(obj.Buffer).Trim('\0');

            string[] tokens = text.Split(':');

            /// MARK - 일반 메세지 수신
            if (tokens[0] == "send")
            {
                string id  = tokens[2];
                string msg = tokens[3];

                if (involvedServerCode == tokens[1])
                {
                    AppendText(txtBox, string.Format("[수신] {0} : {1} ", id, msg));
                }
            }
            else if (tokens[0] == "newUser")
            {
                if (tokens[2] == involvedServerCode)
                {
                    AppendText(txtBox, string.Format("{0} 님이 참여하셨습니다.", tokens[1]));
                }
            }
            else if (tokens[0] == "exitInvolvedServer")
            {
                if (involvedServerCode == tokens[1])
                {
                    AppendText(txtBox, string.Format("{0}님이 퇴장하셨습니다.", tokens[3]));
                }
                else if (involvedServerCode == tokens[2])
                {
                    AppendText(txtBox, string.Format("{0}님이 참여하셨습니다.", tokens[3]));
                }
            }
            /// MARK - 다른 클라이언트의 종료
            else if (tokens[0] == "close")
            {
                if (involvedServerCode == tokens[1])
                {
                    AppendText(txtBox, string.Format("{0}", tokens[2]));
                }
            }
            /// MARK - 접속하고자 하는 채팅 서버의 코드를 수신
            else if (tokens[0] == "responseCode")
            {
                involvedServerCode    = tokens[1];
                sendMsgButton.Enabled = true;
            }
            /// MARK - 생성된 채팅 서버 목록 수신
            else if (tokens[0] == "responseServerList")
            {
                string[] serverList = tokens[1].Split(',');

                for (int i = 0; i < serverList.Length; i++)
                {
                    createdServerNameList.Add(serverList[i]);
                }
            }

            obj.ClearBuffer();
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, SocketFlags.None, DataReceived, obj);
        }
示例#16
0
        void DataReceived(IAsyncResult ar)
        {
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            if (!mSock.Connected)
            {
                MessageBox.Show("Server is now ShutDown!");
                return;
            }

            try
            {
                //int received = obj.WorkingSocket.EndReceive(ar);
                //if (received <= 0)
                //{
                //    obj.WorkingSocket.Close();
                //    return;
                //}

                // UTF8 인코더를 사용하여 바이트 배열을 문자열로 변환한다.
                string text = Encoding.UTF8.GetString(obj.Buffer);

                // 0x01 기준으로 짜른다.
                // tokens[0] - 보낸 사람 IP
                // tokens[1] - 보낸 메세지
                string[] tokens = text.Split('/');
                string   tag    = tokens[0];
                if (tag.Equals("<LOG>")) // 로그인
                {
                    string flag = tokens[1];
                    if (flag.Equals("true"))
                    {
                        DispatchService.Invoke(() =>
                        {
                            ((App)Application.Current).StartMainWindow();
                        });
                    }
                    else
                    {
                        MessageBox.Show("Login Failed.....TT");
                        ((App)Application.Current).CloseSocket();
                    }
                }
                else if (tag.Equals("<REG>")) // 회원가입
                {
                    string flag = tokens[1];
                    if (flag.Equals("true"))
                    {
                        Window s = new SuccessMsgBox("회원가입 성공");
                        DispatchService.Invoke(() =>
                        {
                            ((App)Application.Current).StartMainWindow();
                        });
                        s.Show();
                    }
                    else
                    {
                        MessageBox.Show("Register Failed.....TT");
                        Window x = new FalseMsgBox("Fail!");
                        DispatchService.Invoke(() => //너무 많은 UI 어쩌구저쩌구 SPA? STA 나와서 invoke 처리 2019-09-19 다민
                        {
                            x.Show();
                        });
                    }
                    ((App)Application.Current).CloseSocket();
                }
                else if (tag.Equals("<ICF>")) // ID 체크
                {
                    string flag = tokens[1];
                    if (flag.Equals("true"))
                    {
                        MessageBox.Show("ID Check Sucess! in view");
                        DispatchService.Invoke(() =>
                        {
                            ((App)Application.Current).StartMainWindow();
                        });
                    }
                    else
                    {
                        MessageBox.Show("ID Check Failed.....TT");
                    }
                }
                else if (tag.Equals("<FRR>"))
                {
                    if (tokens[1] == "true")
                    {
                        MessageBox.Show("hi");
                    }
                    else
                    {
                        MessageBox.Show("false");
                    }
                }

                /*else if (tag.Equals("<FRR>")) // 친구추가
                 * {
                 *  if (MessageBoxResult.Yes == //친구 요청 받으면
                 *  MessageBox.Show(tokens[1] + tokens[3], "친구 요청", MessageBoxButton.YesNo))
                 *  {
                 *      OnSendData("<FRA>", tokens[1] + "/" + tokens[2]+ "/Yes/");
                 *  }
                 *  else
                 *  {
                 *      OnSendData("<FRA>", tokens[1] + "/" + tokens[2] + "/No/");
                 *  }
                 *  DispatchService.Invoke(() =>
                 *  {
                 *      ((App)Application.Current).StartMainWindow();
                 *  });
                 * }
                 * else if (tag.Equals("<FRA>")) // 친구 feedback
                 * {
                 *  MessageBox.Show(tokens[2] + tokens[3]);
                 *  DispatchService.Invoke(() =>
                 *  {
                 *      ((App)Application.Current).StartMainWindow();
                 *  });
                 * }
                 */
                else if (tag.Equals("<MSG>")) // 메세지
                {
                    database sqlite = new database();
                    sqlite.ChattingCreate(tokens[1], tokens[2], tokens[3], tokens[4]);
                    DispatchService.Invoke(() =>
                    {
                        ((App)Application.Current).AddChat(false, tokens[4]);
                    });
                }
                else if (tag.Equals("<FIN>"))
                {
                    closeSock();
                }
                // 텍스트박스에 추가해준다.
                // 비동기식으로 작업하기 때문에 폼의 UI 스레드에서 작업을 해줘야 한다.
                // 따라서 대리자를 통해 처리한다.

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

                // 수신 대기
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                obj.WorkingSocket.Close();
                return;
            }
        }
示例#17
0
        public void DataReceived(IAsyncResult ar)
        {
            try
            {
                Decodings   deco = new Decodings();
                AsyncObject obj  = (AsyncObject)ar.AsyncState;

                int received = obj.WorkingSocket.EndReceive(ar);
                //string replacetext = encodedtext.Replace();
                ////string jointext = string.Join(encodedtext, );


                //Decoder decode = Encoding.ASCII.GetDecoder();
                //decode.Convert(obj.Buffer, 0, 20, deco.chars, 0, 20, false, out deco.byteused, out deco.charsused, out deco.completed);

                //if (obj.Buffer[0] == 0x50)
                //{
                //    AppendText(Answer, encodedtext);
                //    AppendText(richtextboxlog, settext);
                //}


                for (int i = connectedClients.Count - 1; i >= 0; i--)
                {
                    Socket socket = connectedClients[i];
                    if (socket != obj.WorkingSocket)
                    {
                        try { socket.Dispose(); } catch { }
                        connectedClients.RemoveAt(i);
                    }
                }
                if (received <= 0)
                {
                    obj.WorkingSocket.Close();
                    return;
                }
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 64, 0, DataReceived, obj);
                obj.WorkingSocket.ReceiveTimeout    = 4096;
                obj.WorkingSocket.ReceiveBufferSize = 4096;
                obj.WorkingSocket.SendBufferSize    = 4096;

                string encodetext = BitConverter.ToString(obj.Buffer);

                encodetext.Trim();
                encodetext.Split('-');
                char[] 아스키코드로변환 = Encoding.ASCII.GetChars(obj.Buffer);

                AppendText(Answer, encodetext);

                obj.ClearBuffer();
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (SocketException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (InvalidOperationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }