... Tôi có thể tưởng tượng, mặc dù xác suất thấp, thông điệp của tôi có thể chứa các giá trị "10 và 13" sau khi chúng không phải là byte dừng.
Một tình huống khi một phần dữ liệu bằng chuỗi kết thúc nên được xem xét khi thiết kế định dạng của gói dữ liệu nối tiếp. Một điều khác cần xem xét là bất kỳ nhân vật nào cũng có thể bị hỏng hoặc bị mất trong quá trình truyền tải. Ký tự bắt đầu, ký tự dừng, byte tải trọng dữ liệu, byte tổng kiểm tra hoặc byte CRC, byte sửa lỗi chuyển tiếp không tránh khỏi tham nhũng. Cơ chế đóng khung phải có khả năng phát hiện khi một gói có dữ liệu bị hỏng.
Có một số cách để tiếp cận tất cả điều này.
Tôi đang đưa ra giả định làm việc rằng các gói chỉ được đóng khung với các byte nối tiếp. Các dòng bắt tay không được sử dụng để đóng khung. Thời gian trễ không được sử dụng để đóng khung.
Gửi chiều dài gói
Gửi độ dài của gói ở đầu, thay vì [hoặc thêm vào] ký tự kết thúc ở cuối.
ưu điểm: Tải trọng được gửi ở định dạng nhị phân hiệu quả.
Nhược điểm: Cần biết chiều dài gói khi bắt đầu truyền.
Thoát khỏi những nhân vật đặc biệt
Thoát các ký tự đặc biệt khi gửi dữ liệu tải trọng. Điều này đã được giải thích trong một câu trả lời trước đó .
ưu điểm: Người gửi không cần biết chiều dài của gói khi bắt đầu truyền.
Nhược điểm: Ít hiệu quả hơn, tùy thuộc vào số lượng byte tải trọng cần được thoát.
Dữ liệu tải trọng được mã hóa sao cho không thể chứa các ký tự bắt đầu và dừng
Tải trọng của gói được mã hóa sao cho nó không thể chứa các ký tự bắt đầu hoặc dừng. Thông thường, điều này được thực hiện bằng cách gửi các số dưới dạng đại diện ASCII hoặc Hex-ASCII của chúng.
ưu điểm: Con người có thể đọc được với các chương trình thiết bị đầu cuối phổ biến. Không cần mã để xử lý thoát. Không cần biết chiều dài của gói khi bắt đầu truyền
Nhược điểm: Hiệu quả thấp hơn. Đối với một byte dữ liệu tải trọng, một vài byte được gửi.