Xử lý vấn về bộ đệm dữ liệu trong ứng dụng client – server (TCP Socket) Phần 2

0
156

Ở bài viết Xử lý vấn về bộ đệm dữ liệu trong ứng dụng client – server (TCP Socket) Phần 1 đã giới thiệu đến các bạn cách xử lý bằng cách sử dụng các thông điệp với cùng kích thước cố định. Nhưng đây  là một giải pháp lãng phí bởi vì tất cả các thông điệp đều phải cùng kích thước. Nếu các thông điệp nào chưa đủ kích thước thì phải thêm phần đệm vào, gây lãng phí băng thông mạng.

Một giải pháp cho vấn đề cho phép các  thông điệp được gởi với các kích thước khác nhau là gởi kích thước thông điệp kèm với thông điệp. Bằng cách này thiết bị nhận sẽ biết được kích thước của mỗi thông điệp.

Để thực hiện việc này ta sửa đổi phương thức SendData() trong bài viết trước thành phương thức SendVarData :

Trong phương thức SendVarData(), ta sẽ lấy kích thước của thông điệp và gắn nó vào đầu của thông điệp, kích thước này là một số interger 4 byte. Kích thước tối đa của mỗi thông  điệp này là 65KB. Giá trị interger 4 byte này  đầu tiên  được chuyển thành mảng các byte, hàm GetBytes() của lớp BitConverter được dùng để thực hiện việc này. Mảng kích thước sau đó được gởi đến thiết bị ở xa, sau khi gởi kích thước thông điệp xong, phần chính của thông điệp được gởi đi, kỹ thuật gởi cũng giống như trong ví dụ trước, chúng ta sẽ lặp cho đến khi tất cả các byte đã được gởi.

Bước tiếp theo là tạo ra một phương thức có thể nhận 4 byte kích thước thông điệp và toàn bộ thông điệp. phương thức ReceiveData() trong  bài viết trước được sửa đổi để thực hiện việc này:

Hàm ReceiveVarData() nhận 4 byte đầu tiên của thông điệp và chuyển nó thành giá trị interger bằng phương thức GetInt32() của lớp BitConverter.

Chương trình Server gởi và nhận thông điệp cùng với kích thước

Chương trình Client gởi và nhận thông điệp cùng với kích thước

Trên đây là cách thứ hai để giải quyết vấn đề bộ đệm dữ liệu trong ứng dụng client – server. Một cách khác để gởi các thông điệp với kích thước khác nhau là sử dụng các hệ thống đánh dấu sẽ được giới thiệu ở bài viết tiếp theo! Chúc các bạn thành công!

LEAVE A REPLY