TCP/IP, cũng như UDP, gói bao gồm một số tài liệu tham khảo để kích thước của chúng . IP header chứa trường 16 bit chỉ định độ dài của tiêu đề IP và dữ liệu theo byte. TCP header chứa trường 4 bit chỉ định kích thước của tiêu đề TCP trong các từ 32 bit. UDP header chứa trường 16 bit chỉ định độ dài của tiêu đề UDP và dữ liệu theo byte.
Đây là điều.
Sử dụng ổ cắm tiêu chuẩn chạy trong Windows, cho dù bạn đang sử dụng không gian tên System.Net.Sockets trong C# hoặc công cụ Winsock gốc trong Win32, bạn sẽ không bao giờ thấy tiêu đề IP/TCP/UDP . Các tiêu đề này bị tước đi để những gì bạn nhận được khi bạn đọc ổ cắm là tải trọng thực tế, tức là dữ liệu đã được gửi.
Mẫu điển hình từ mọi thứ tôi từng thấy và thực hiện bằng cách sử dụng ổ cắm là bạn xác định tiêu đề cấp ứng dụng đứng trước dữ liệu bạn muốn gửi. Ở mức tối thiểu, tiêu đề này phải bao gồm kích thước của dữ liệu để theo dõi. Điều này sẽ cho phép bạn đọc toàn bộ "thông điệp" một cách toàn bộ mà không phải đoán kích thước của nó. Bạn có thể nhận được như ưa thích như bạn muốn với nó, ví dụ, mẫu đồng bộ, CRCs, phiên bản, loại tin nhắn, vv, nhưng kích thước của "tin nhắn" là tất cả các bạn thực sự cần.
Và đối với những gì đáng giá, tôi khuyên bạn nên sử dụng tiêu đề thay vì dấu phân cách cuối gói. Tôi không chắc chắn nếu có một bất lợi signficant để phân định EOP, nhưng tiêu đề là cách tiếp cận được sử dụng bởi hầu hết các giao thức IP tôi đã nhìn thấy.Ngoài ra, nó có vẻ trực quan hơn với tôi để xử lý một thông báo ngay từ đầu thay vì đợi một số mẫu xuất hiện trong luồng của tôi để cho biết rằng thông điệp của tôi đã hoàn tất.
EDIT: Tôi chỉ mới biết về dự án Bộ đệm giao thức của Google. Từ những gì tôi có thể nói, nó là một chương trình serialization/de-serialization nhị phân cho WCF (tôi chắc chắn đó là một sự đơn giản hóa quá). Nếu bạn đang sử dụng WCF, bạn không phải lo lắng về kích thước của các tin nhắn được gửi bởi vì hệ thống ống nước WCF chăm sóc điều này đằng sau hậu trường, đó có lẽ là lý do tại sao bạn không tìm thấy bất cứ điều gì liên quan đến chiều dài tin nhắn trong giao thức Tài liệu đệm. Tuy nhiên, trong trường hợp của ổ cắm, biết kích thước sẽ giúp đỡ rất nhiều như đã thảo luận ở trên. Tôi đoán là bạn sẽ tuần tự hóa dữ liệu của bạn bằng cách sử dụng Protocol Buffers và sau đó tack vào bất kỳ tiêu đề ứng dụng bạn đưa ra trước khi gửi nó. Ở phía bên nhận, bạn sẽ kéo tiêu đề ra và sau đó xóa đi phần còn lại của tin nhắn.
Nguồn
2009-03-01 05:32:43
Nếu bạn có nghĩa là protobuf-net, không có nó không chỉ dành cho WCF; có các ví dụ về ổ cắm trong dự án. –