Exemplo n.º 1
0
        private void InitSocket()
        {
            if (mainSock.Connected)
            {
                MessageBox.Show("이미 연결되어 있습니다!");
                return;
            }

            try { mainSock.Connect(ip, port); }
            catch (Exception ex)
            {
                MessageBox.Show("연결에 실패했습니다!\n오류 내용: {0}", ex.Message);
                return;
            }

            // 연결 완료되었다는 메세지를 띄워준다.
            AppendText(txt_chat, "서버와 연결되었습니다.");

            // 연결 완료, 서버에서 데이터가 올 수 있으므로 수신 대기한다.
            Element_Async obj = new Element_Async(4096);

            obj.WorkingSocket = mainSock;

            mainSock.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, DataReceived, obj);
        }
Exemplo n.º 2
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 Element_Async 형식으로 변환한다.
            Element_Async obj = (Element_Async)ar.AsyncState;

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

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

                // 텍스트로 변환한다.
                byte[] byteType = new byte[4];
                Buffer.BlockCopy(obj.Buffer, 0, byteType, 0, 4);
                string text        = Encoding.UTF8.GetString(byteType);
                byte[] byteMessage = new byte[obj.BufferSize - 4];
                Buffer.BlockCopy(obj.Buffer, 4, byteMessage, 0, obj.BufferSize - 4);
                if (text.Equals("text"))
                {
                    string   message = Encoding.UTF8.GetString(byteMessage);
                    string[] tokens  = message.Split('\x01');
                    string   _id     = tokens[0];
                    string   _msg    = tokens[1];

                    AppendText(txt_chat, string.Format("{0}: {1}", _id, _msg));
                }
                else if (text.Equals("exit"))
                {
                    return;
                }
                else
                {
                    using (MemoryStream stream = new MemoryStream(obj.Buffer))
                    {
                        BinaryFormatter bf = new BinaryFormatter();
                        stream.Position = 0;

                        all_shapes[nobject] = (All_Shapes)bf.Deserialize(stream);
                        nobject++;

                        //all_object = (Object[])bf.Deserialize(stream);

                        if (panel.InvokeRequired)
                        {
                            panel.Invoke(new MethodInvoker(delegate()
                            {
                                panel.Invalidate(true);
                                panel.Update();
                            }));
                        }
                    }
                }
            }
            obj.ClearBuffer();
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }