Điều này rơi vào những điều cơ bản của giao tiếp giao thức. Một giao dịch đã được yêu cầu bởi ứng dụng khách Android và Máy chủ phải thực hiện giao dịch. Nếu giao dịch phụ thuộc vào xác nhận của máy khách Android thì đây là cuộc gọi liên lạc ACK / NAK.
ACK (xác nhận) và NAK (xác nhận phủ định) được sử dụng để báo cho phía bên kia kết quả của yêu cầu.
Những gì bạn đang hỏi là một loại trao đổi bắt tay giữa máy khách và máy chủ, và nó có thể được thực hiện với một trao đổi ACK / NAK cơ bản.
Dưới đây là một ví dụ về việc Android tải lên một tệp với xác nhận hai chiều.
Android -> upload files -> Server
Android <- ACK #id <- Server
Android -> ACK #id -> Server
Trong ví dụ trên tôi đã thêm một #id
mã định danh duy nhất cho giao dịch. Máy chủ sẽ nhận các tệp, tạo một bản ghi giao dịch và gửi nó dưới dạng phản hồi lại cho Android. Android sau đó nên tuân theo xác nhận về giao dịch đó (hoặc thay vào đó là NAK để từ chối).
Dưới đây là một ví dụ về việc ngắt kết nối Android trong quá trình bắt tay.
Android -> upload files -> Server
Android <- ACK #id <- Server
/** no ACK response **/
Trong ví dụ trên, Máy chủ đã chấp nhận các tệp đã tải lên và gửi #id
phản hồi ACK trở lại Android, nhưng Android không bao giờ phản hồi bằng ACK. Thiết bị Android đã không hoàn thành việc bắt tay. Tùy bạn quyết định cách Máy chủ xử lý việc này. Phá hủy giao dịch, giữ giao dịch và đợi thiết bị Android quay lại sau hoặc hoàn tất giao dịch.
Máy chủ có thể cho rằng vì thiết bị không phản hồi với ACK. Thiết bị Android không cập nhật trạng thái bên trong để cho biết rằng quá trình tải lên đã thành công. Tôi sẽ loại bỏ giao dịch và cho phép thiết bị lặp lại giao dịch trong tương lai.