随着windows 95中文版和windows nt server 4.0中文版的流行, microsoft公司推出了相应平台上的开发软件: visual basic 5.0 中文企业 版。它为windows环境下的网络开发提供了强大的工具,winsock控件就是其中之一。
winsock控件建立在tcp、udp协议的基础上,完成与远程计算机的通信。即使对tcp/ip不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。下面我们对winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。
服务器程序的实现过程是:
(1)服务器程序必须设置好localport属性,作为侦听端口,该值为一个整数(只要是一个其它tcp/ip应用程序没有使用过的值即可)。
(2)使用listen方法进入侦听状态,等待客户机程序的连接请求。
(3)客户机程序发出连接请求,使服务器程序产生connectionrequest事件,该事件得到一个参数requestid。
(4)服务器程序用accept方法接受客户机程序的requestid请求。这样,服务器程序就可以用senddata方法发送数据了。accept方法必须用上一步得到的requestid作为其参数。
(5)当服务器程序接收到数据时,产生dataarrival事件,参数bytestotal包含接收到的数据字节数。在该事件中,可以用getdata方法接收数据。
(6)如果接受到close事件,则用close方法关闭tcp/ip连接。
客户机程序的实现过程是:
(1) 客户程序设置remotehost属性,以便指定运行服务器程序的主机 名,该字符串可在“控制面板|网络|标识|计算机名”中查到。
(2) 设置remoteport属性,以便指定服务器程序的侦听端口。
(3)使用connect方法,向服务器提出连接请求。
(4)服务器接受客户机程序的请求,客户机程序产生connect事件,就可以用senddata方法发送数据了。
(5)当客户机程序接收到数据时,产生dataarrival事件,参数bytestotal包含接收到的数据字节数。在该事件中,可以用getdata方法接收数据。
(6)如果接受到close事件,则用close方法关闭连接。
winsock控件还有两个重要的属性,即protocol和state。protocol设定使用的协议是tcp还是udp:取值scktcpprotocol表示tcp, 取值sckudpprotocol则表示udp。因为winsock控件的缺省设置是scktcpprotocol,所以程序中并没有使用protocol属性。state属性反映的是当前tcp/ip的连接状态,取值如表1所示。
表1 winsock控件的state属性及其描述
| 常数 | 值 | 描述 |
| sckclosed | 0 | 缺省值,关闭。 |
| sckopen | 1 | 打开。 |
| scklistening | 2 | 侦听 |
| sckconnectionpending | 3 | 连接挂起 |
| sckresolvinghost | 4 | 识别主机。 |
| sckhostresolved | 5 | 已识别主机 |
| sckconnecting | 6 | 正在连接。 |
| sckconnected | 7 | 已连接。 |
| sckclosing | 8 | 同级人员正在关闭连接。 |
| sckerror | 9 | 错误。 |