public Task ReciveMessageAsync() { return(Task.Run(() => { try { while (true) { byte[] buf = new byte[1024]; using (var stream = new MemoryStream()) { do { int byteRec = client.Receive(buf); stream.Write(buf, 0, byteRec); } while (client.Available > 0); if (stream.Length != 0) { stream.Position = 0; BinaryFormatter formatter = new BinaryFormatter(); Message tmp = (Message)formatter.Deserialize(stream); stream.Position = 0; if (tmp.Type == MessageType.UserData) { info = tmp.username; Console.WriteLine(tmp.username.username); GetOtherUsers(); } if (tmp.Type == MessageType.Private) { server.SendPrivateMessage(stream.ToArray(), tmp.receiver); } else { server.BroadcastMessage(stream.ToArray(), info.id); } } } } } catch (Exception ex) { Console.WriteLine(ex.Message); client.Shutdown(SocketShutdown.Both); client.Close(); } finally { server.RemoveClient(info.id); } })); }