Em phải chờ cho tới khi toàn bộ dữ liệu đã gửi qua tới client. Khi đó mới close connection.
File f = new File(name);
FileInputStream fis = new FileInputStream(f);
byte[] byteArr = ("{\"RequestType\":5, \"ToUser\":\"" + clientID + "\", \"FileName\":\"" + f.getName() + "\", \"FileLength\":" + f.length() + "}").getBytes();
sendStream.write(byteArr, 0, byteArr.length);
sendStream.flush();
byte[] buffer = new byte[1024 * 1024];
int numByte = 0;
while ((numByte = fis.read(buffer)) > 0) {
sendStream.write(buffer, 0, numByte);
sendStream.flush();
}
fis.close();
Kiểm tra cái biến numByte. Ở đây em while thế này thì chỉ mới 1 bytes thôi nó đã close connection rồi. Do 1 > 0 mà 
Cách của socket hoạt động thế này. Ở phía đầu server sẽ tạo ra một cái file, ở phía client cũng sẽ tạo ra một cái file.
Hai cái file này thông nhau, người ta có thể gọi là pipe, gọi là cái ống. Đầu này ghi thì đầu kia nhận. Dữ liệu chạy qua giống như dẫn nước qua ống vậy.
Đầu gửi gửi 100 bytes thì đầu nhận cũng phải chờ cho tới khi nhận được 100 bytes mới ngừng. Đôi khi em may mắn, dữ liệu nhỏ và mạng tốt, thì mới có thể gửi được toàn bộ nội dung mà không cần chờ.
Sửa lại đoạn code ở trên thành chờ để đọc byte và nối vào dữ liệu có sẵn.
biến đếm số byte đã đọc numByte = 0
Loop
Có dự liệu, đọc vào và tăng numByte += byteRead
nối dữ liệu mới nhận vào buffer
nếu numByte >= số byte cần đọc thì thoát