简单的Winsock应用程式设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
簡單的 Winsock 應用程式設計(1) 林 軍 鼐 相信各位讀者現在對於 Winsock 的定義、系統環境,以及一些 Winsock Stack 及 Winsock 應用程式,都有基本的認識了。接下來筆者希望能分幾期為各位讀者 介紹一下簡單的 Winsock 網路應用程式設計。 我們將以 Winsock 1.1 規格所定義的 46 個應用程式介面(API)為基礎,逐 步來建立一對 TCP socket 主從架構(Client / Server)的程式。在這兩個程式中, Server 將使用 Winsock 提供的「非同步」(asynchronous)函式來建立 socket 連 結、關閉、及資料收送等等;而 Client 則採類似傳統 UNIX 的「阻攔式」 (blocking)。由於我們的重點並不在於 MS Windows SDK 的程式設計,所以我 們將使用最簡便的方式來顯示訊息;有關 MS Windows 程式的技巧,請各位讀者 自行研究相關的書籍及文章。 今天我們先要看一下主從架構 TCP socket 的建立連結(connect)及關閉 (close)。(參見圖 1.) (圖 1. 主從架構的 TCP socket 連接建立與關閉) 以前筆者曾簡單地介紹過主從架構的概念,現在我們再以生活上更淺顯的例 子來說明一下,讀者稍後也較容易能明白筆者的敘述。我們可以假設 Server 就像 是電信局所提供的一些服務,比如「104 查號台」或「112 障礙台」。 (1)電信局先建立好了一個電話總機,這就像是呼叫 socket() 函式開啟了一 個 socket。 (2)接著電信局將這個總機的號碼定為 104,就如同我們呼叫 bind() 函式, 將 Server 的這個 socket 指定(bind)在某一個 port。當然電信局必須讓用戶知道 這個號碼;而我們的 Client 程式同樣也要知道 Server 所用的 port,待會才有辦法 與之連接。 (3)電信局的 104 查號台底下會有一些自動服務的分機,但是它的數量是有 限的,所以有時你會撥不通這個號碼(忙線)。同樣地,我們在建立一個 TCP 的 Server socket 時,也會呼叫 listen() 函式來監聽等待;listen() 的第二個參數即是 waiting queue 的數目,通常數值是由 1 到 5。(事實上這兩者還是有點不一 樣。) (4)用戶知道了電信局的這個 104 查號服務,他就可以利用某個電話來撥號 連接這個服務了。這就是我們 Client 程式開啟一個相同的 TCP socket,然後呼叫 connect() 函式去連接 Server 指定的那個 port。當然了,和電話一樣,如果 waiting queue 滿了、與 Server 間線路不通、或是 Server 沒提供此項服務時,你的連接就 會失敗。 (5)電信局查號台的總機接受了這通查詢的電話後,它會轉到另一個分機做 服務,而總機本身則再回到等待的狀態。Server 的 listening socket 亦是一樣,當 你呼叫了 accept() 函式之後,Server 端的系統會建立一個新的 socket 來對此連接 做服務,而原先的 socket 則再回到監聽等待的狀態。 (6)當你查詢完畢了,你就可以掛上電話,彼此間也就離線了。Client 和 Server 間的 socket 關閉亦是如此;不過這個關閉離線的動作,可由 Client 端或 Server 端任一方先關閉。有些電話查詢系統不也是如此嗎? 接下來,我們就來看主從架構的 TCP socket 是如何利用這些 Winsock 函式來 達成的;並利用資策會資訊技術處的「WinKing」這個 Winsock Stack 中某項功能 來顯示 sockets 狀態的變化。文章中僅列出程式的片段,完整的程式請看附錄的程 式。 【Server 端建立 socket 並進入監聽等待狀態】 首先我們先看 Server 端如何建立一個 TCP socket,並使其進入監聽等待的狀 態。 在圖 1. 上,我們可以看到最先被呼叫到的是 WSAStartup() 函式。說明如下: WSAStartup():連結應用程式與 Winsock.DLL 的第一個函式。 格 式: int PASCAL FAR WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); 參 數: wVersionRequested 欲使用的 Windows Sockets API 版本 lpWSAData 指向 WSADATA 資料的指標 傳回值: 成功 - 0 失敗 - WSASYSNOTREADY / WSA

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档