精品一区二区中文在线,无遮挡h肉动漫在线观看,国产99视频精品免视看9,成全免费高清大全

深入Windows通信編程

時間:2023-05-01 08:05:53 計算機論文 我要投稿
  • 相關推薦

深入Windows通信編程

一、Windows通信機制

Windows與DOS編程的重要差別在于Windows程序是消息驅動和設備統一管理。體現在通信方面,DOS中的寄存器直接讀寫、BIOS調用和通信中斷程序等編程方法都不能或不宜采用。Windows通過通信驅動程序COMM.DRV與硬件接口,向程序員提供了多達17個標準函數,功能強大,但也增加了理解和編程的難度。

Windows3.1通信函數主要有:

OpenComm

打開一通信設備

BuildCimmDCB將一設備定義字符串轉變為DCB數據結構

EnableCommNotification使能或禁止傳送WM_COMMNOTIFY消

SetCommState設置通信設備狀態

SetCommEventMask設置通信事件掩碼

ReadComm從通信設備讀字符

WriteComm向通信設備寫字符

FlushComm清除一發送或接收隊列

GetCommEventMask返回通信事件掩碼

GetCommState返回設備控制塊(DCB)

GetCommError恢復通信設備狀態

CloseComm關閉一通信設備

DCB數據結構、其它通信函數及各函數的具體用法請參見有關資料。

一般Windows通信編程應包括兩部分:設備初始化及WM_COMMNOTIF

Y消息處理。

設備初始化典型流程如圖1。

圖1

WM_COMMNOTIFY消息處理典型流程如圖2。

圖2

對于大多數實際通信來說,可能只需要處理流程圖中的一部分。

設備初始化及WM_COMMNOTIFY消息處理兩部分密切相關。所有類型WM_COMMNOTIFY消息的傳送都是因為在初始化函數中進行了相應的設置。

換言之,可以根據通信的實際情況有選擇地設置,控制Windows向應用程序發送的WM_COMMNOTIFY消息的數量和類型,以期達到高效、可靠的通信。例如,對于固定長度消息型的通信可以在EnableCommNotification函數中設置cbWriteNotify和cbOutQueue參數為消息長度;對于以固定字符結尾的消息型通信可以在事件掩碼中包括EV_RXFLAG,將DCB數據結構中的EvtChar變量置為結尾字符,然后調用SetCommState和SetCommEventMask函數;對于遵循V.25bis之類協議的通信,由于用到了大量信號線來作握手信號,則事件掩碼中要包含EV_CTS、EV_DSR、EV_RSLD及EV_RING等;而對于文件傳送型的通信,則宜將OpenComm函數中的cbInQue和cbOutQue變量、EnablecCommNotification中的cbWriteNotify和cbOutQueue變量設置為較大值,以加快文件傳送速度。

二、Windows通信疑難探討

現將筆者在實際編程中遇到的疑難和解決辦法描述如下,希望對遇到類似問題的朋友有所啟發。

1.怎樣用Windows未提供的波特率通信?

Windows提供了由110bps至256000bps共十三種波特率,一般情況下已足夠使用。但在某種特定情況下,例如通信對方使用150bps、又無法要求對方改變波特率時,Windows通信就比較困難了。

首先想到的解決方法是直接調用BIOS中斷14H來設置波特率(DOS提供了150bps的波特率)。結果是Windows屏蔽了該中斷,嘗試失敗。

最后的是采用"蒙混過關"的辦法解決問題的:首先,以任一Windows支持的波特率(例如300bps)構造通信參數字符串,調用BuildCommDCB產生DCB數據結構;然后調用SetCommState設置通信參數;最后再調用自編函數直接修改串口通信寄存器的值。經實驗,設置成功,且對Windows程序運行無任何不良影響。

2.接收數據為何"丟失"?

通過設置EnableCommNotification函數中的cbWriteNotify參數(在發送WM_COMMNOTIFY消息之前,通信設備驅動程序必須向應用程序出入隊列中寫入的字節數),可以使系統每收到固定個字符發出一WM_COMMNOTIFY消息,這對于固定長度消息型的通信是很方便的。但實際應用時有時會發生接收數據"丟失"現象,即收到WM_COMMNOTIFY消息后從接收隊列讀出cbNotify個數據時,發現只有前面

[1] [2] [3] [4] 

【深入Windows通信編程】相關文章:

深入04-29

WINDOWS XP教案04-25

編程的心得03-14

給機器編程04-28

安裝Windows或啟動Windows時鼠標不可用06-20

windows及應用實踐報告04-14

初識Windows的教學方案01-17

數控編程心得05-07

編程語言排名04-29

windows操作實驗報告09-03