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); //다른 메시지를 계속 받기 위함 } }
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를 비동기적으로 받음 } }