论文部分内容阅读
摘 要: 本文介绍利用WinSock控件及控件数组建立连接,并讨论怎样实现客户机/服务器模式下一个服务端同时为多个客户端提供WinSock连接。
关键词: VB WinSock控件 数组
随着计算机局域网的不断发展、普及,网络版软件也越来越体现出了网络时代的优点与其先进性。往往此类软件都会有一个服务端,由服务端控制着若干客户端的运行。一般来说,服务端和客户端之间都要进行大量的信息传送,而其中很多就是使用WinSock控件。
一、WinSock控件的基础知识
WinSock控件对用户来说是不可见的,它提供了访问TCP和UDP网络服务的方便途径。使用WinSock编写网络应用程序,不必了解网络协议的细节或调用低级的WinSock API,通过对WinSock控件的属性设置和方法调用就可以轻易实现计算机之间的连接,并且还可以实现双向交换数据。
1.常用属性
LocalPort:本地通信程序(WinSock)的端口号。
RemoteHost:远程机器名,机器名也可以是IP地址。
RemoteHostIP:远程机器IP地址。RemoteHost和RemoteHostIP属性只设置其中之一。
RemotePort:远程通信程序(WinSock)端口号。
Protocol:使用协议。可选的协议是TCP和UDP,对应的VB的常量分别是sck、TCP、Protocol和sck、UDP、Protocol,Winsock控件默认协议是TCP。
2.常用方法
Accept:接受一个连接请求。格式:对象.accept requestID。
Bind:多协议接口下,把接口卡、IP地址捆绑在一起。格式:对象.Bind端口号,IP。
Close:关闭连接。格式:对象.Close。
Connect:发送连接请求。格式:对象.Connect(IP,远程端口)。
GetData:取出数据后清除数据缓冲区。格式:对象.Getdata变量。
PeekData:取出数据后,但不清除数据缓冲区。格式:对象.Peekdata变量。
Listen:进入监听状态,以便及时对连接请求进行响应。格式:对象.Listen。
SendData:发送数据。格式:对象.SendData data。
3.常用事件
Close:远程设备关闭连接时触发事件。
Connect:建立连接,进行通信时触发。
ConnectionRequest:有连接请求时触发。
DataArrival:有数据到达时触发。
二、WinSock控件应用方法
1.WinSock连接过程
网络应用软件中,必须有服务端和客户端。服务端能够接受客户端的连接请求,而连接必须由客户端发起。具体过程如下。
准备工作:
服务端:设置WinSock端口号(LocalPort),使用协议(Protocol),如果机器中有两块以上的网卡,则需要进行端口绑定(Bind),使用Listen方法进入监听状态,等待响应客户端的连接请求。
客户端:设置WinSock远程计算机名或IP地址(RemoteHost或RemoteHostIP),设置远程计算机端口号(此处要和服务端端口号一致),使用协议(Protocol)。
连接过程:
第一步,由客户端使用Connect方法请求建立连接。
第二步,服务端接收到连接请求,触发ConnectionRequest事件,同时得到一个requestID参数。
第三步,服务端使用Accept方法建立连接,该方法必须用到上一步得到的requestID参数,Listen状态自动结束。
第四步,连接建立后,客户端会触发Connect事件(如果设置响应的话)。
第五步,双方可以进行双向数据传输,使用SendData方法发送数据,接收方接收到数据后,会触发DataArrival事件,使用GetData或PeerData方法接收数据。
第六步,任意一方发出结束请求(Close)或直接关闭,对方触发Close事件(如果设置相应的话)。
以上就是一个WinSock连接实施的全过程,适应于一个服务端对应一个客户端的情况。但是实际应用中,往往是一个服务端可能要同时和多个客户端连接,而所有的客户端设置的远程端口号是相同的。从上面的连接过程可以看出,当服务端响应某个客户端的连接请求后,服务端的监听状态随即结束,客户端的连接请求也不会再被响应,也就是说,服务端不能够同时和多个客户端连接。为了使得服务端能够同时和多个客户端同时连接,我们往往在服务端采用WinSock控件数组来进行连接。
2.WinSock控件数组的应用
应用WinSock控件数组,能够轻松实现一个服务端对应多个客户端的连接请求,从而实现一对多的网络版应用程序。其原理如下:
将WinSock控件的Index属性设置为0,使之成为一个控件数组,再设置端口号等参数,用Listen方法使WinSock(0)控件进入监听状态。有客户端请求连接时,WinSock(0)会触发ConnectionRequest事件,此时,不使用WinSock(0)响应连接请求,而是装入一个WinSock(i)控件,由WinSock(i)调用Accept方法建立连接。建立连接时,只需要在Accept后面注明从WinSock(0)的ConnectionRequest事件中得来的requestID参数,即可实现WinSock(i)和客户端的连接。由于连接时未使用WinSock(0),所以其监听状态并未改变,还可以响应其它客户端发出的连接请求。
参考文献:
[1]李立宗.VB程序设计教程[M].南开大学出版社,2009.2.
[2]Andrew S.Tanenbaum.计算机网络(第4版)[M].清华大学出版社,2004.8.
[3]袁帅等.Visual Basic编程实例教程[M].北京希望电子出版社,2002.11.
关键词: VB WinSock控件 数组
随着计算机局域网的不断发展、普及,网络版软件也越来越体现出了网络时代的优点与其先进性。往往此类软件都会有一个服务端,由服务端控制着若干客户端的运行。一般来说,服务端和客户端之间都要进行大量的信息传送,而其中很多就是使用WinSock控件。
一、WinSock控件的基础知识
WinSock控件对用户来说是不可见的,它提供了访问TCP和UDP网络服务的方便途径。使用WinSock编写网络应用程序,不必了解网络协议的细节或调用低级的WinSock API,通过对WinSock控件的属性设置和方法调用就可以轻易实现计算机之间的连接,并且还可以实现双向交换数据。
1.常用属性
LocalPort:本地通信程序(WinSock)的端口号。
RemoteHost:远程机器名,机器名也可以是IP地址。
RemoteHostIP:远程机器IP地址。RemoteHost和RemoteHostIP属性只设置其中之一。
RemotePort:远程通信程序(WinSock)端口号。
Protocol:使用协议。可选的协议是TCP和UDP,对应的VB的常量分别是sck、TCP、Protocol和sck、UDP、Protocol,Winsock控件默认协议是TCP。
2.常用方法
Accept:接受一个连接请求。格式:对象.accept requestID。
Bind:多协议接口下,把接口卡、IP地址捆绑在一起。格式:对象.Bind端口号,IP。
Close:关闭连接。格式:对象.Close。
Connect:发送连接请求。格式:对象.Connect(IP,远程端口)。
GetData:取出数据后清除数据缓冲区。格式:对象.Getdata变量。
PeekData:取出数据后,但不清除数据缓冲区。格式:对象.Peekdata变量。
Listen:进入监听状态,以便及时对连接请求进行响应。格式:对象.Listen。
SendData:发送数据。格式:对象.SendData data。
3.常用事件
Close:远程设备关闭连接时触发事件。
Connect:建立连接,进行通信时触发。
ConnectionRequest:有连接请求时触发。
DataArrival:有数据到达时触发。
二、WinSock控件应用方法
1.WinSock连接过程
网络应用软件中,必须有服务端和客户端。服务端能够接受客户端的连接请求,而连接必须由客户端发起。具体过程如下。
准备工作:
服务端:设置WinSock端口号(LocalPort),使用协议(Protocol),如果机器中有两块以上的网卡,则需要进行端口绑定(Bind),使用Listen方法进入监听状态,等待响应客户端的连接请求。
客户端:设置WinSock远程计算机名或IP地址(RemoteHost或RemoteHostIP),设置远程计算机端口号(此处要和服务端端口号一致),使用协议(Protocol)。
连接过程:
第一步,由客户端使用Connect方法请求建立连接。
第二步,服务端接收到连接请求,触发ConnectionRequest事件,同时得到一个requestID参数。
第三步,服务端使用Accept方法建立连接,该方法必须用到上一步得到的requestID参数,Listen状态自动结束。
第四步,连接建立后,客户端会触发Connect事件(如果设置响应的话)。
第五步,双方可以进行双向数据传输,使用SendData方法发送数据,接收方接收到数据后,会触发DataArrival事件,使用GetData或PeerData方法接收数据。
第六步,任意一方发出结束请求(Close)或直接关闭,对方触发Close事件(如果设置相应的话)。
以上就是一个WinSock连接实施的全过程,适应于一个服务端对应一个客户端的情况。但是实际应用中,往往是一个服务端可能要同时和多个客户端连接,而所有的客户端设置的远程端口号是相同的。从上面的连接过程可以看出,当服务端响应某个客户端的连接请求后,服务端的监听状态随即结束,客户端的连接请求也不会再被响应,也就是说,服务端不能够同时和多个客户端连接。为了使得服务端能够同时和多个客户端同时连接,我们往往在服务端采用WinSock控件数组来进行连接。
2.WinSock控件数组的应用
应用WinSock控件数组,能够轻松实现一个服务端对应多个客户端的连接请求,从而实现一对多的网络版应用程序。其原理如下:
将WinSock控件的Index属性设置为0,使之成为一个控件数组,再设置端口号等参数,用Listen方法使WinSock(0)控件进入监听状态。有客户端请求连接时,WinSock(0)会触发ConnectionRequest事件,此时,不使用WinSock(0)响应连接请求,而是装入一个WinSock(i)控件,由WinSock(i)调用Accept方法建立连接。建立连接时,只需要在Accept后面注明从WinSock(0)的ConnectionRequest事件中得来的requestID参数,即可实现WinSock(i)和客户端的连接。由于连接时未使用WinSock(0),所以其监听状态并未改变,还可以响应其它客户端发出的连接请求。
参考文献:
[1]李立宗.VB程序设计教程[M].南开大学出版社,2009.2.
[2]Andrew S.Tanenbaum.计算机网络(第4版)[M].清华大学出版社,2004.8.
[3]袁帅等.Visual Basic编程实例教程[M].北京希望电子出版社,2002.11.