Ejemplo n.º 1
0
        private void ChatroomForm_Load(object sender, EventArgs e)
        {
            editbt.BackColor     = Color.FromArgb(26, 177, 136);
            this.editbt.AutoSize = true;
            loginform            = new LoginForm();
            loginform.ShowDialog();

            //로그인창이 닫히면 실행하는 부분 소켓열고, 연결하고
            if (loginform.Visible == false)
            {
                //서버 연결하기
                IPAddress  ipaddress = IPAddress.Parse("192.168.10.103");
                IPEndPoint endPoint  = new IPEndPoint(ipaddress, 5000);

                //연결하기
                mainSock.Connect(ipaddress, 5000);
                AsyncObject obj = new AsyncObject(4096);
                obj.WorkingSocket = mainSock;
                mainSock.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, DataReceived, obj);
            }
        }
Ejemplo n.º 2
0
        private 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(fromtext, string.Format("[받음]{0}: {1}", ip, msg));

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

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