// Data를 받았을 때 시작되는 Callback private void ReceiveData(IAsyncResult asyncResult) { AsyncObject asyncObject = asyncResult.AsyncState as AsyncObject; try { asyncObject.WorkingSocket.EndReceive(asyncResult); } catch { asyncObject.WorkingSocket.Close(); return; } string text = Encoding.UTF8.GetString(asyncObject.Buffer); string[] tokens = text.Split('\x01'); try { if (tokens[1][0] == '\x02') { AppendText(tokens[0] + "님이 입장하셨습니다. ( 현재 인원 : " + connectClientList.Count + "명"); try { dataGridView.Rows.Add(new string[] { tokens[0] }); } catch { } } else if (tokens[1][0] == '\x03') { AppendText(tokens[0] + "님이 퇴장하셨습니다. (현재 인원 : " + (connectClientList.Count - 1) + "명"); try { for (int i = 0; i < dataGridView.Rows.Count; i++) { if (tokens[0] == dataGridView.Rows[i].Cells[0].Value as string) { dataGridView.Rows.RemoveAt(i); break; } } } catch { } } else { AppendText("[받음] " + tokens[0] + " : " + tokens[1]); } } catch { } for (int i = connectClientList.Count - 1; i >= 0; i--) { Socket tempSocket = connectClientList[i]; if (tempSocket != asyncObject.WorkingSocket) { try { tempSocket.Send(asyncObject.Buffer); } catch { tempSocket.Close(); connectClientList.RemoveAt(i); } } } asyncObject.ClearBuffer(); try { asyncObject.WorkingSocket.BeginReceive(asyncObject.Buffer, 0, 4096, 0, ReceiveData, asyncObject); } catch { asyncObject.WorkingSocket.Close(); connectClientList.Remove(asyncObject.WorkingSocket); } }
//Data start when you recieve callback private void ReceiveData(IAsyncResult asyncResult) { AsyncObject asyncObject = asyncResult.AsyncState as AsyncObject; try { asyncObject.WorkingSocket.EndReceive(asyncResult); } catch { asyncObject.WorkingSocket.Close(); return; } string text = Encoding.UTF8.GetString(asyncObject.Buffer); string[] tokens = text.Split('\x01'); try { if (tokens[1][0] == '\x02') { //shows user joining and displays number of users in server AppendText(tokens[0] + " has joined (current people: " + connectClientList.Count + " people)"); try { dgvUsernames.Rows.Add(new string[] { tokens[0] }); } catch { } } else if (tokens[1][0] == '\x03') { //shows user leaving and displays number of users in server AppendText(tokens[0] + " has left (current people: " + (connectClientList.Count - 1) + " people)"); try { for (int i = 0; i < dgvUsernames.Rows.Count; i++) { if (tokens[0] == dgvUsernames.Rows[i].Cells[0].Value as string) { dgvUsernames.Rows.RemoveAt(i); break; } } } catch { } } //message recieved from client else { AppendText("[Recieved] " + tokens[0] + ": " + tokens[1]); } } catch { } for (int i = connectClientList.Count - 1; i >= 0; i--) { Socket tempSocket = connectClientList[i]; if (tempSocket != asyncObject.WorkingSocket) { try { tempSocket.Send(asyncObject.Buffer); } catch { tempSocket.Close(); connectClientList.RemoveAt(i); } } } asyncObject.ClearBuffer(); try { asyncObject.WorkingSocket.BeginReceive(asyncObject.Buffer, 0, 4096, 0, ReceiveData, asyncObject); } catch { asyncObject.WorkingSocket.Close(); connectClientList.Remove(asyncObject.WorkingSocket); } }