client sắp hoàn hiện(đã test)