2010-05-18 38 views
7

dữ liệu có thể được đọc từ hoặc ghi vào một ổ cắm TCP kết nối bằng cách sử dụng nhận(), async_receive(), send() hoặc các chức năng thành viên async_send(). Tuy nhiên, vì chúng có thể dẫn đến viết hoặc đọc ngắn, ứng dụng thường sẽ sử dụng các hoạt động sau đây: read(), async_read(), write() và async_write().boost.asio của socket nhận/gửi chức năng là xấu?

Tôi không thực sự hiểu rằng nhận xét như read(), async_read(), write() và async_write() cũng có thể kết thúc trong viết hoặc đọc ngắn, phải không?
Tại sao các chức năng đó không giống nhau?
Tôi có nên sử dụng chúng không?
Ai đó có thể làm rõ nhận xét đó cho tôi không?

Trả lời

6

Các đọc, async_read, ghi async_writegồm chức năng mà gọi các chức năng lớp nhiều lần cho đến khi số yêu cầu của byte được truyền đi. Chúng được bao gồm bởi thư viện như một sự tiện lợi. Nếu không, mọi nhà phát triển sẽ cần phải thực hiện cùng một logic.

Các hàm lớp bọc các hàm hệ điều hành cơ bản trực tiếp, về cơ bản là trạng thái trong tài liệu: các hàm này có thể trả về trước khi tất cả các byte được truyền đi.

Trong hầu hết các trường hợp, bạn nên sử dụng các hàm (bao gồm) miễn phí để truyền dữ liệu.

+0

Tại sao nó được thiết kế theo cách này? Trong trường hợp nào bạn không cần nhận tất cả các byte được yêu cầu? Tại sao đối tượng ổ cắm không bao gồm đọc/ghi/async_read/async_write? Bạn đang đi qua một ổ cắm anyway. –

+0

Tôi không biết tại sao, nhưng bạn có thể tìm thấy câu trả lời trong "Đề xuất Thư viện Mạng cho TR2". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2054.pdf – Dan

+1

Về tài liệu được liên kết trước đó, hãy xem trang 8. – Dan

-1

Trước hết, bạn phải hiểu từ "không đồng bộ", điều này đơn giản có nghĩa là "không cần chờ". Sau khi hành động không đồng bộ được gọi, hành động sau sẽ thực hiện mà không cần đợi trả lại hành động không đồng bộ. Trong khi đồng bộ phải đợi cho đến khi các hành động đồng bộ trước đó trở lại. Hai mẫu sau đây từ Boost.Asio sẽ có ý nghĩa: A synchronous TCP daytime server

(! Rất tiếc không đủ uy tín, mẫu thứ hai là dễ dàng để tìm thấy mặc dù, được gọi là "Một ban ngày máy chủ không đồng bộ TCP")

+0

Điều này liên quan đến câu hỏi của tôi như thế nào? –

+0

xin lỗi .... tôi cho rằng đoạn đầu tiên trong câu hỏi của bạn là một câu trích dẫn ... vì vậy tôi sẽ nhập chúng ..... – rhapsodyn

Các vấn đề liên quan