private void RecieveCallback(IAsyncResult ar) { RecieveStateObject state = (RecieveStateObject)ar.AsyncState; string content = string.Empty; if (!state.WorkSocket.Connected) { return; } int bytesRead = state.WorkSocket.EndReceive(ar); if (bytesRead > 0) { state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead)); content = state.sb.ToString(); int indexOfEOM = content.IndexOf("<EOM>"); while (indexOfEOM > -1) { String message = content.Substring(0, indexOfEOM); // Ignores EOM HandleMessage(message); content = content.Substring(indexOfEOM + 5); // Ignores EOM indexOfEOM = content.IndexOf("<EOM>"); } state.sb = new StringBuilder(content); } DoBeginRecieve(state); }
private void StartRecieve(Socket s) { RecieveStateObject so = new RecieveStateObject(); so.WorkSocket = s; DoBeginRecieve(so); }
private void DoBeginRecieve(RecieveStateObject so) { if (!so.WorkSocket.Connected) { return; } try { so.WorkSocket.BeginReceive(so.buffer, 0, RecieveStateObject.BufferSize, 0, new AsyncCallback(RecieveCallback), so); } catch (Exception ex) when(ex is SocketException || ex is ObjectDisposedException) { OnDisconnect(); MessageBox.Show("Other user was disconnected."); } }