일반적인 HTTP 통신 구조로 구현 하신 듯 한데.
socket 통신은 동작이 달라 이 방식으로 구현 하시면 안됩니다.
blocking socket 의 read 경우 데이터가 들어어가나 타임아웃 될 때 까지 대기하는데,
서버에서 한번 socket 에 데이터를 write 한 이후 더이상 데이터를 write 하지 않아서,
단말에서 다시 read 부를 때 blocking 되어 멈췄을 듯 합니다.
메세지 뒤에 종료 정보를 둬서 그 이후로는 read를 부르지 않거나,
서버에서 처음에 사이즈 보내고, 이후 그 사이즈만큼의 데이터를 보내는 방식으로 구현하고,
단말에서 사이즈를 구한 후 그 사이즈 만큼 read하게 구현 하셔야 합니다.