示例#1
0
        void DataReceived(IAsyncResult ar)
        {
            if (mClientSocket.Connected)
            {
                ChatBuffer chatBuffer = (ChatBuffer)ar.AsyncState;                  //BeginReceive의 마지막 매개변수인 buffer를 가져옴

                string msg = Encoding.UTF8.GetString(chatBuffer.buffer).Trim('\0'); //\0을 지우기 위함

                SendMessage(chatBuffer.workingSocket, msg);                         //받은 msg를 Client에도 전송

                chatBuffer.ClearBuffer();

                chatBuffer.workingSocket.BeginReceive(chatBuffer.buffer, 0, chatBuffer.buffer.Length, 0, DataReceived, chatBuffer); //다른 메시지를 계속 받기 위함
            }
        }
示例#2
0
        private void WaitToConnect(IAsyncResult ar) //client 접속을 기다리는 동안 실행
        {
            if (clients.Count < 2)
            {
                mClientSocket = mServerSocket.EndAccept(ar); //들어오는 접속 신호를 비동기적으로 받아들임
                clients.Add(mClientSocket);

                mClientName = Convert.ToChar(clients.Count + 64);
                mMainForm.NotiMessage("클라이언트" + mClientName + "가 접속했습니다.");

                mServerSocket.BeginAccept(WaitToConnect, null); //다른 클라이언트의 접속을 위함

                ChatBuffer chatBuffer = new ChatBuffer(1024);   //Client에서 보낸 data를 byte형식으로 받기 위한 class
                chatBuffer.workingSocket = mClientSocket;

                mClientSocket.BeginReceive(chatBuffer.buffer, 0, chatBuffer.buffer.Length, 0, DataReceived, chatBuffer); //data를 비동기적으로 받음
            }
        }