Beispiel #1
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;
            }


            formMadeByRcv = true;
            GetChatForm(this, "ClientForm2");


            string text = Encoding.UTF8.GetString(obj.Buffer);

            Control     ctrl = Control.FromHandle(this.formHandle);
            ClientForm2 clf2 = (ClientForm2)ctrl;

            clf2.AppendText(string.Format("관리자: {0}", text));


            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }
Beispiel #2
0
        private void ClientForm3_Load(object sender, EventArgs e)
        {
            IPHostEntry he = Dns.GetHostEntry(Dns.GetHostName());

            // 처음으로 발견되는 ipv4 주소를 사용한다.
            foreach (IPAddress addr in he.AddressList)
            {
                if (addr.AddressFamily == AddressFamily.InterNetwork)
                {
                    thisAddress = addr;
                    break;
                }
            }

            if (mainSock.Connected)
            {
                MessageBox.Show("이미 연결되어 있습니다!");
                return;
            }

            int port = 8081;

            try
            {
                mainSock.Connect(thisAddress, port);
            }
            catch (Exception ex)
            {
                MessageBox.Show("연결에 실패했습니다!", ex.Message, MessageBoxButtons.OK);
                return;
            }

            AsyncObject obj = new AsyncObject(4096);

            obj.WorkingSocket = mainSock;

            byte[] bDts = Encoding.UTF8.GetBytes(myNum.ToString());
            obj.WorkingSocket.Send(bDts);

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

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

            if (received > 0)
            {
                string text = Encoding.UTF8.GetString(obj.Buffer);

                if (text.Contains("SignUpFail"))
                {
                    MessageBox.Show("이미 존재하는 아이디입니다.");
                    isOK = false;
                }

                else if (text.Contains("SignUpSuccess"))
                {
                    MessageBox.Show("사용 가능한 아이디입니다.");
                    isOK = true;
                }

                else
                {
                    MessageBox.Show("서버가 아이디를 인식하지 못했습니다.");
                }

                obj.ClearBuffer();

                // 수신 대기
                obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
            }
            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            else if (received <= 0)
            {
                obj.WorkingSocket.Close();
                return;
            }
        }
Beispiel #4
0
        void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

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

            if (received > 0)
            {
                string text = Encoding.UTF8.GetString(obj.Buffer);
                //Debug.WriteLine(text);
                text = text.Trim('\0');

                if (text.Contains("ProductList")) //상품 목록 출력
                {
                    text = text.Replace("ProductList", "");

                    string[] receivedString = text.Split('\x02');
                    string[] temp;

                    for (int i = 0; i < receivedString.Length - 1; i++)
                    {
                        temp = receivedString[i].Split('\x01');
                        ListViewItem lvitem = new ListViewItem(temp);
                        LvItemAppend(lvMenuList, lvitem);
                    }
                    LvSetColor(lvMenuList, Color.Red);

                    obj.ClearBuffer();

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

                else if (text.Contains("OrderSuccessed"))
                {
                    OrderSuccessed();
                }

                else if (text.Contains("OrderFailed"))
                {
                    OrderFailed();
                }

                else //상품 이미지 출력
                {
                    ReceivedArray temp = new ReceivedArray(received);
                    temp.arr = (byte[])obj.Buffer.Clone();

                    byteList.Add(temp);

                    obj.ClearBuffer();

                    // 수신 대기
                    obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
                }
            }
            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            else if (received <= 0)
            {
                obj.WorkingSocket.Close();
                return;
            }
        }
Beispiel #5
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            Socket tempSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

            if (txtID.Text == "" || txtPW.Text == "")
            {
                MessageBox.Show("아이디와 비밀번호를 기입해 주십시오.");
                return;
            }

            int port;

            if (!int.TryParse(txtPort.Text, out port))
            {
                MessageBox.Show("포트 번호가 잘못 입력되었거나 입력되지 않았습니다.");
                txtPort.Focus();
                txtPort.SelectAll();
                return;
            }

            try
            {
                tempSock.Connect(txtAddress.Text, port);
            }
            catch (Exception ex)
            {
                MessageBox.Show("연결에 실패했습니다!", ex.Message, MessageBoxButtons.OK);
                return;
            }

            AsyncObject obj = new AsyncObject(4096);

            obj.WorkingSocket = tempSock;

            byte[] check = new byte[5000];
            check = Encoding.UTF8.GetBytes(txtID.Text + '\x01' + txtPW.Text);
            tempSock.Send(check);

            byte[] isgood = new byte[100];
            tempSock.Receive(isgood);

            if (Encoding.UTF8.GetString(isgood).Contains("GoodToLogin"))
            {
                mainSock = tempSock;
                byte[] bDts = new byte[5000];
                mainSock.Receive(bDts);

                myNum = Convert.ToInt32(Encoding.UTF8.GetString(bDts));

                mainSock.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, DataReceived, obj);

                btnOrder.Enabled    = true;
                btnQuit.Enabled     = true;
                btnOpenChat.Enabled = true;
                btnConnect.Enabled  = false;
                btnSignUp.Enabled   = false;
                txtAddress.Enabled  = false;
                txtID.Enabled       = false;
                txtPort.Enabled     = false;
                txtPW.Enabled       = false;
            }

            else if (Encoding.UTF8.GetString(isgood).Contains("LoginDisabled"))
            {
                MessageBox.Show("로그인이 불가능합니다.");
                tempSock.Dispose();
            }
        }