• Thứ Tư, 16/08/2006 15:29 (GMT+7)

    Dùng VB6 để viết chương trình truyền ký tự qua cổng COM

    Câu hỏi :
    Dùng VB6 để viết chương trình truyền ký tự qua cổng COM nhưng mỗi lần nhận (mỗi lần sự kiện comEvReceive được gọi) nó chỉ nhận tối đa 8 ký tự (text). Nếu truyền quá 8 ký tự 1 lần thì máy thu sẽ ngắt ra làm nhiều lần thu tương ứng mỗi lần là 8 ký tự. Xin hỏi có cách nào để nhận được số ký tự nhiều hơn cho một lần nhận không? 
     

    Trả lời :

    Bạn không nói rõ đoạn code VB truyền/nhận ký tự của bạn dùng kỹ thuật gì hay đối tượng gì nên chúng tôi chỉ trả lời tổng quát. Thường người lập trình cổng COM thông qua các đối tượng có sẵn (hoặc của Microsoft hoặc của hãng khác), các đối tượng này cung cấp giao tiếp truy xuất COM rất thân thiện, dễ dàng, chúng che dấu mọi chi tiết cấp thấp đã xảy ra như thế nào. Thí dụ, mỗi khi bạn gọi hàm để gửi 1 chuỗi n ký tự, thực tế máy sẽ lưu chuỗi mà bạn yêu cầu gửi vào buffer tạm rồi sẽ gởi sau tại thời điểm thích hợp, và mỗi lần, máy có thể gửi m ký tự (m có thể nhỏ hơn hay lớn hơn n ký tự mà bạn yêu cầu). Ở máy nhận cũng vậy, mỗi khi nhận được ký tự, máy sẽ chứa vào buffer tạm, và khi thích hợp mới tạo sự kiện báo cho ứng dụng nhận dữ liệu biết. Khi gọi hàm nhận dữ liệu, tùy trạng thái buffer nhận hiện hành và/hoặc tham số của hàm qui định mà máy sẽ trả về bao nhiêu ký tự. Số ký tự mà hàm nhận được thường nhỏ hơn số ký tự mà buffer nhận đang lưu giữ.

    Tóm lại khi viết ứng dụng gửi/nhận dữ liệu (dù thông qua giao tiếp phần mềm nào và trên phần cứng nào), người lập trình phải định nghĩa cho được giao thức làm việc. Giao thức làm việc là tập các thông báo request/reply mà ứng dụng khách/chủ sẽ tuân thủ, định dạng cụ thể của từng request/reply. Nếu là ứng dụng gửi/nhận dữ liệu, thế nào cũng tồn tại 1 request qui định số byte hay ký tự sẽ được truyền, nhờ đó ứng dụng nhận sẽ lập vòng (loop) chờ nhận đủ số byte qui định, cho dù chúng đến ở những thời điểm độc lập và cách xa nhau.
     

    Chuyên mục: Windows