简单的 winsock 应用程式设计

简单的 winsock 应用程式设计

ID:12688407

大小:186.00 KB

页数:34页

时间:2018-07-18

简单的 winsock 应用程式设计_第1页
简单的 winsock 应用程式设计_第2页
简单的 winsock 应用程式设计_第3页
简单的 winsock 应用程式设计_第4页
简单的 winsock 应用程式设计_第5页
资源描述:

《简单的 winsock 应用程式设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、TCP连接建立与关闭相信各位读者现在对於Winsock的定义、系统环境,以及一些WinsockStack及Winsock应用程式,都有基本的认识了。接下来笔者希望能分几期为各位读者介绍一下简单的Winsock网路应用程式设计。我们将以Winsock1.1规格所定义的46个应用程式介面(API)为基础,逐步来建立一对TCPsocket主从架构(Client/Server)的程式。在这两个程式中,Server将使用Winsock提供的「非同步」(asynchronous)函式来建立socket连结、关闭、及资料收送等等;而Client则采类似传统UNIX的「阻拦式」(blocking

2、)。由於我们的重点并不在於MSWindowsSDK的程式设计,所以我们将使用最简便的方式来显示讯息;有关MSWindows程式的技巧,请各位读者自行研究相关的书籍及文章。今天我们先要看一下主从架构TCPsocket的建立连结(connect)及关闭(close)。以前笔者曾简单地介绍过主从架构的概念,现在我们再以生活上更浅显的例子来说明一下,读者稍後也较容易能明白笔者的叙述。我们可以假设Server就像是电信局所提供的一些服务,比如「104查号台」或「112障碍台」。(1)电信局先建立好了一个电话总机,这就像是呼叫socket()函式开启了一个socket。(2)接著电信局将这个

3、总机的号码定为104,就如同我们呼叫bind()函式,将Server的这个socket指定(bind)在某一个port。当然电信局必须让用户知道这个号码;而我们的Client程式同样也要知道Server所用的port,待会才有办法与之连接。(3)电信局的104查号台底下会有一些自动服务的分机,但是它的数量是有限的,所以有时你会拨不通这个号码(忙线)。同样地,我们在建立一个TCP的Serversocket时,也会呼叫listen()函式来监听等待;listen()的第二个参数即是waitingqueue的数目,通常数值是由1到5。(事实上这两者还是有点不一样。)(4)用户知道了电信

4、局的这个104查号服务,他就可以利用某个电话来拨号连接这个服务了。这就是我们Client程式开启一个相同的TCPsocket,然後呼叫connect()函式去连接Server指定的那个port。当然了,和电话一样,如果waitingqueue满了、与Server间线路不通、或是Server没提供此项服务时,你的连接就会失败。(5)电信局查号台的总机接受了这通查询的电话後,它会转到另一个分机做服务,而总机本身则再回到等待的状态。Server的listeningsocket亦是一样,当你呼叫了accept()函式之後,Server端的系统会建立一个新的socket来对此连接做服务,而

5、原先的socket则再回到监听等待的状态。(6)当你查询完毕了,你就可以挂上电话,彼此间也就离线了。Client和Server间的socket关闭亦是如此;不过这个关闭离线的动作,可由Client端或Server端任一方先关闭。有些电话查询系统不也是如此吗?接下来,我们就来看主从架构的TCPsocket是如何利用这些Winsock函式来达成的;并利用资策会资讯技术处的「WinKing」这个WinsockStack中某项功能来显示sockets状态的变化。文章中仅列出程式的片段,完整的程式请看附录的程式。Server进入监听状态首先我们先看Server端如何建立一个TCPsocke

6、t,并使其进入监听等待的状态。在图1.上,我们可以看到最先被呼叫到的是WSAStartup()函式。WSAStartup格  式:intPASCALFARWSAStartup(WORDwVersionRequested, LPWSADATAlpWSAData);参  数: wVersionRequested欲使用的WindowsSocketsAPI版本lpWSAData  指向WSADATA资料的指标传回值: 成功–0          失败-WSASYSNOTREADY/WSAVERNOTSUPPORTED/  WSAEINVAL说明:此函式「必须」是应用程式呼叫到Window

7、sSocketsDLL函式中的第一个,也唯有此函式呼叫成功後,才可以再呼叫其他Windows  SocketsDLL的函式。此函式亦让使用者可以指定要使用的WindowsSocketsAPI版本,及获取设计者的一些资讯。程式中我们要用Winsock1.1,所以我们在程式中有一段为:WSAStartup((WORD)((1<<8)

8、1),(LPWSADATA)&WSAData)其中((WORD)((1<<8)

9、1)表示我们要用的是Winsock「1.1」版本,而WSAData则是用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。