VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • Winsock的方法属性

Winsock的方法属性
vb教程
Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。
Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。
为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。
通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。 

一、TCP 基础 
数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。
如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),
还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。如果创建服务器应用程序,
就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 
ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。建立连接后,
任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。
调用 DataArrival 事件内的 GetData 方法就可获取数据。 

二、UDP 基础 
用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。
另外 UDP 应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的 LocalPort 属性。
然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,
并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。
于是,客户计算机使用 DataArrival 事件内的 GetData 方法来获取已发送的信息。 
属性: BytesReceived属性,Index属性,LocalHostName属性,LocalIP属性,LocalPort属性,Object属性,
Name属性,Parent属性,Protocol属性,RemoteHost属性,RemoteHostIP属性,RemotePort属性,SocketHandle属性,
State属性,Tag属性。 
事件: Close事件,Connet事件,ConnectionRequest事件,DataArrival事件,Error事件,SendComplete事件,SendProgress事件。 
方法: Accept方法,Bind方法,Close方法(WinSock控件),Listen方法,PeekData方法,SendData方法,GetData方法(WinSock控件)。 

三、Accept 方法 
仅适用于 TCP 服务器应用程序。在处理 ConnectionRequest 事件时用这个方法接受新连接。 
语法:object.Accept requestID 
object 所在处代表对象表达式,其值是WinSock控件的对象。 
数据类型:Long 
返回值:Void 
说明: 
在 ConnectionRequest 事件中使用 Accept 方法。ConnectionRequest 事件有一个对应的参数,即 RequestID 参数,
该参数应该传给 Accept 方法。请看下例: 
Private Sub Winsock1_ConnectionRequest _ 
(ByVal requestID As Long) 
'测试 State 属性,如果当前连接是打开的话, 
'则关闭连接。 
If Winsock1.State <> sckClosed Then Winsock1.Close 
'将 requestID 参数值传递给 Accept 方法。 
Winsock1.Accept requestID 
End Sub 
应该在新的控件示例(不是侦听状态下的示例)中使用 Accept 方法。 

四、Bind 方法 
指定用于 TCP 连接的 LocalPort 和 LocalIP。如果有多协议适配卡,就用这个方法。 
语法:object.Bind LocalPort, LocalIP 
Bind 方法的语法包含下面部分 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

LocalPort 
用来建立连接的端口。 

LocalIP 
用来建立连接的本地 Internet 地址。 

说明: 
在调用 Listen 方法之前必须调用 Bind 方法。 

五、BytesReceived 属性 
返回接收到的(当前在接收端缓冲区内的)数据的数量。使用 GetData 方法来获取数据。 
在设计时是只读的,而且是不可用的。 
语法:object.BytesReceived 
object 所在处代表一个对象表达式,其值是WinSock控件的对象。 
返回值:Long 

六、Close 方法(Winsock 控件) 
对客户机和服务器应用程序关闭 TCP 连接或侦听套接字。 
语法:object.Close 
object 所在处代表对象表达式,其值是WinSock控件的对象。 
参数:None 
返回值:Void 

七、Close 事件 
当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。 
语法:object_Close( ) 
object 所在处代表一个对象表达式,其值是WinSock控件的对象。 
参数:None 

  
八、ConnectionRequest 事件 
当远程计算机请求连接时出现。 

仅适用于 TCP 服务器应用程序。在请求一个新连接时激活该事件。激活事件之后,RemoteHostIP 和 RemotePort 属性存储有关客户的信息。 

语法:object_ConnectionRequest (requestID As Long) 

ConnectionRequest 的语法有包含下面部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

RequestID 
新连接请求标识。应把此参数传递给第二个控件示例上的 Accept 方法。 

说明 

服务器可决定是否接受连接。如果不接受新连接,则同级人员(客户)将得到 Close 事件。
(在一个新控件示例上)用 Accept 方法接受新连接。 

九、Connect 事件 (Winsock 控件) 
当连接操作完成后产生。 

语法:object.Connect() 

object 所在处代表一个对象表达式,其值为一个 Winsock 控件。 

说明 

使用 Connect 事件确认连接是否已经成功。 

十、Error 事件 
无论何时,只要后台处理中出现错误(例如,连接失败,或者在后台收发数据失败)事件就会出现。 

语法 

object_Error(number As Integer, Description As String, Scode As Long,
 Source As String, HelpFile as String, HelpContext As Long, CancelDisplay As Boolean) 

Error 事件的语法包含下面部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

number 
定义错误代码的整数。请参阅下述有关常数的“设置值”。 

description 
包含错误信息的字符串。 

Scode 
长 SCODE 

Source 
描述错误来源的字符串。 

HelpFile 
包含帮助文件名的字符串。 

HelpContext 
Help 文件上下文。 

CancelDisplay 
指示是否取消显示。缺省值为 False,以此显示缺省的错误信息框。如果不想使用缺省的信息框,则将 CancelDisplay 设置成 True。 

设置值 

number 的设置值是: 

常数 
值 
描述 

sckOutOfMemory 
7 
内存不足 

sckInvalidPropertyValue 
380 
属性值无效。 

sckGetNotSupported 
394 
属性不可读。 

sckSetNotSupported 
383 
属性是只读的。 

sckBadState 
40006 
所请求的事务或请求本身的错误协议或者错误连接状态。 

sckInvalidArg 
40014 
传递给函数的参数格式不确定,或者不在指定范围内。 

sckSuccess 
40017 
成功。 

sckUnsupported 
40018 
不受支持的变量类型。 

sckInvalidOp 
40020 
在当前状态下的无效操作 

sckOutOfRange 
40021 
参数越界。 

sckWrongProtocol 
40026 
所请求的事务或请求本身的错误协议 

sckOpCanceled 
1004 
取消操作。 

sckInvalidArgument 
10014 
所请求的地址是广播地址,但未设置标记 

sckWouldBlock 
10035 
套接字不成块,而指定操作将使之成块。 

sckInProgress 
10036 
制造块的 Winsock 操作在进行之中。 

sckAlreadyComplete 
10037 
完成操作。未进行制造块的操作。 

sckNotSocket 
10038 
描述符不是套接字。 

sckMsgTooBig 
10040 
数据报太大,不适于缓冲区的要求,因而被截断。 

sckPortNotSupported 
10043 
不支持指定的端口。 

sckAddressInUse 
10048 
地址在使用中。 

SckAddressNotAvailable 
10049 
来自本地机器的不可用地址。 

SckNetworkSubsystemFiled 
10050 
网络子系统失败。 

sckNetworkUnreachable 
10051 
此时不能从主机到达网络。 

sckNetReset 
10052 
在设置SO_KEEPALIVE 时连接超时。 

sckConnectAborted 
11053 
由于超时或者其它失败而中止连接。 

sckConnectionReset 
10054 
通过远端重新设置连接。 

SckNoBufferSpace 
10055 
没有可用的缓冲空间。 

SckAlreadyConnected 
10056 
已连接套接字。 

SckNotConnected 
10057 
未连接套接字。 

SckSocketShutdown 
10058 
已关闭套接字。 

sckTimedout 
10060 
已关闭套接字。 

sckConnectionRefused 
10061 
强行拒绝连接。 

sckNotInitialized 
10093 
应首先调用 WinsockInit。 

sckHostNotFound 
11001 
授权应答:未找到主机。 

SckHostNotFoundTryAgain 
11002 
非授权应答:未找到主机。 

SckNonRecoverableError 
11003 
不可恢复的错误。 

SckNoData 
11004 
无效名,对所请求的类型无数据记录。 

十一、GetData 方法(Winsock 控件) 
获取当前的数据块并将其存储在变体类型的变量中。 

返回值:Void 

语法:object.GetData data, [type,] [maxLen] 

GetData 方法的语法包含下面部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

data 
在方法成功返回之后存储获取数据的地方。如果对请求的类型没有足够可用的数据,则将 data 设置成 Empty。 

type 
可选的。获取的数据类型,如下例“设置值”所示。 

maxLen 
可选的。在接收到字节数组或字符串时所需大小。如果对字节数组或字符串、参数丢失、则将获取所有可用数据。
如果提供的数据类型不是字节数组或字符串,则忽略这个参数。 

设置值 

type 的设置值是: 

描述 常数 

描述 
常数 

Byte 
vbByte 

Integer 
vbInteger 

Long 
vbLong 

Single 
vbSingle 

Double 
vbDouble 

Currency 
vbCurrency 

Date 
vbDate 

Boolean 
vbBoolean 

SCODE 
vbError 

String 
vbString 

Byte Array 
vbArray + vbByte 

说明 

通常总是将 GetData 方法与 DataArrival 事件并用,而 DataArrival 事件包含 totalBytes 参数。
如果指定一个比 totalBytes 参数小的 maxlen,则将得到警告 10040,以此指出剩余的字节将丢失。 

十二、Listen 方法 
创建套接字并将其设置为侦听模式。该方法仅适用于 TCP 连接。 

语法:object.Listen 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

参数:None 

返回值:Void 

说明 

当有新连接时就会出现 ConnectionRequest 事件。处理 ConnectionRequest 事件时,
应用程序应该(在一个新的控件示例上)用 Accept 方法接受连接。 

十三、LocalHostName 属性 
返回本地机器名。在设计时是只读的,而且是不可用的。 

语法:object.LocalHostName 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

返回值:String 

十四、LocalIP 属性 
返回本地机器的 IP 地址,格式是 IP 地址加点字符串 (xxx.xxx.xxx.xxx)。在设计时是只读的,而且是不可用的。 

语法:object.LocalIP 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

数据类型:String 

十五、LocalPort 属性 
返回或者设置所用到的本地端口。在设计时是可读/写的,而且是可用的。 

对客户来说,该属性指定发送数据的本地端口。如果应用程序不需要特定端口,则指定 0 为端口号。在这种情况下,


控件将选择一个随机端口。在建立起连接之后,这就是用于 TCP 连接的本地端口。 

对于服务器来说,这是用于侦听的本地端口。如果指定的是端口 0,就使用一个随机端口。在调用了 Listen 方法后,
属性就包含了已选定的实际端口。 

语法:object.LocalPort = long 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

数据类型:Long 

说明 

在计算机之间常用端口 0 来动态地建立连接。例如,一个客户希望服务器给他“回电话”,它就可用端口 0 获得新的(随机)端口号,
然后将该端口号交给远程计算机,从而达到目的。 

十六、Name 属性 
返回在代码中用于标识窗体、控件、或数据访问对象的名字。在运行时是只读的。 

返回或设置字体对象的名字。 

语法:object.Name 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。如果 object 被删去,则与活动窗体模块相联系的窗体被认为是 object。 

说明 

新对象的缺省名字由对象类型加上一个唯一的整数组成。例如,第一个新的 Form 对象是 Form1, 一个新的 MDIForm 对象是 MDIForm1,
以及在窗体上创建的第三个 TextBox 控件是 Text3。 

一个对象的 Name 属性必须以一个字母开始并且最长可达 40 个字符。它可以包括数字和带下划线 (_) 的字符,但不能包括标点符号或空格。
窗体不能具有与别的公共对象相同的名字,例如 Clipboard、Screen 或 App。
虽然 Name 属性设置可以是一个关键字、属性名字、或别的对象的名字,但这会在你的代码中产生冲突。 

能够在运行时与 Dim 语句一起使用一个窗体的 Name 属性,以此创建该窗体的其它实例。在设计时不能有两个窗体有相同的名字。 

能够通过设置 Name 属性为相同的值来创建相同类型的控件数组。例如,当将群组中的所有选项按钮的名字设置为 MyOpt 时, 

Visual Basic 将为每个控件的 Index 属性分配一个唯一的值以便使数组中的控件相互区分。不同类型的两个控件不能共享相同的名字。 

注意 虽然 Visual Basic 经常将 Name 属性设置作为 Caption、LinkTopic 和 Text 属性的缺省值使用,
但是这些属性中一个的改变对别的属性并没有影响。 

十七、Parent 属性 
返回包含控件、或其它对象或者集合的窗体、对象、或集合。 

语法:object.Parent 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

说明 

使用 Parent 属性可访问一个对象的父亲的属性、方法、或控件。例如: 

MyButton.Parent.MousePointer = 4 

Parent 属性在应用程序中是很有用的,其中可将对象作为参数来传递。例如,可以传递一个控件变量给模块中的一个一般的过程,

并使用 Parent 属性访问其父窗体。 

在 Parent 属性和 MDIChild 属性之间没有任何联系。尽管如此,
但在一个 MDIForm 对象和任何已经将其 MDIChild 属性设为 True 的 Form 对象之间仍有父-子关系。 

十八、PeekData 方法 
PeekData 不从输入队列删除数据,除了这一点之外,方法与 GetData 相似。该方法仅适用于 TCP 连接。 

语法: 

object.PeekData data, [type,] [maxLen] 

PeekData 方法的语法包含下面部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

data 
在方法成功地返回之后存储获取的数据。如果对于没有足够的适于所请求的类型来说没有足够可用的数据,那么 data 将被设置为 Empty。 

type 
可选的。所获取的数据类型,如同“设置值”中所述。缺省值为:vbArray + vbByte。 

maxLen 
可选的。在收到字节数组或字符串时,长度指定了所需要的大小。如果对字节数组或字符串的参数丢失,则将获取所有可用的数据。
如果提供的数据类型不是字节数组和字符串的话,则忽略该参数。 

设置值 

type 的设置值是: 

描述 
常数 

Byte 
vbByte 

Integer 
vbInteger 

Long 
vbLong 

Single 
vbSingle 

Double 
vbDouble 

Currency 
vbCurrency 

Date 
vbDate 

Boolean 
vbBoolean 

SCODE 
vbError 

String 
vbString 

Byte Array 
vbArray + vbByte 

返回值:Void 

说明 

如果所指定的类型为 vbString,则在返回到用户之前,字符串数据将转化成 UNICODE。 

十九、Protocol 属性(Winsock 控件) 
返回或设置 Winsock 控件所使用的协议— 或者是 TCP,或者是 UDP。 

语法:object.Protocol [=protocol] 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

设置值 

protocol 的设置值是: 

常数 
值 
描述 

sckTCPProtocol 
0 
缺省的。TCP 协议。 

sckUDPProtocol 
1 
UDP协议。 

返回值:Void 

说明 

在能够重新设置属性之前必须(用 Close 方法)关闭控件。 

二十、RemoteHost 属性(ActiveX控件) 
返回或设置控件发送或接收数据的远程计算机。可以提供直接名如http://www.china-pub.com/,或提供IP地址如“202.99.14.22”。 

语法: 

object.RemoteHost = string 

RemoteHost属性语法有以下几部分: 

部分 
描述 

Object 
对象表达式,其值是WinSock控件的对象。 

String 
远程计算机的名字或IP地址。 

数据类型:String 

说明 

当指定了该属性时,URL属性跟着更新以便反映新值。并且,如果URL的协议部分更新了,RemoteHost属性也跟着更新以便反映新值。 

使用OpenURL和Execute方法会改变该属性的值。 

二十一、RemoteHostIP 属性 
返回远程机器的 IP 地址。 

对于客户应用程序来说,已经用 Connect 方法建立连接后,属性就包含了远程机器的 IP 字符串。 

对于服务器应用程序来说,在请求连接(ConnectionRequest 事件)之后,属性包含远程计算机的 IP 字符串,该字符串启动了连接。 

当使用 UDP 协议时,在 DataArrival 事件出现之后,属性包含了发送 UDP 数据的计算机的 IP 地址。 

语法:object.RemoteHostIP 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

数据类型:String 

二十二、RemotePort 属性(ActiveX控件) 
设置或返回要连接的远程端口号。 

语法:object.RemotePort = port 

RemotePort属性语法有以下几部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

Port 
要连接的端口号。缺省值是80。 

数据类型:Long 

vb教程说明 

当设置Protocol属性时,RemotePort属性也自动为每种协议设置相应的缺省端口。 

下表列出了缺省的端口: 

端口号 
描述 

80 
HTTP,通常用于World Wide Web连接。 

21 
FTP 

二十三、SendComplete 事件 
在完成一个发送操作时出现。 

语法:object_SendComplete 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

参数:None 

二十四、SendData 方法 
将数据发送给远程计算机。 

返回值:Void 

语法:object.SendData data 

SendData 方法的语法有下面这些部分: 

部分 
描述 

Object 
对象表达式,其值是WinSock控件的对象。 

data 
要发送的数据。对于二进制数据应使用字节数组。 

说明 

当传进 UNICODE 字符串并在网络上发送出去之前,将转化成 ANSI 字符串。 

二十五、SendProgress 事件 
在发送数据期间出现。 

语法:object_SendProgress (bytesSent As Long, bytesRemaining As Long) 

SendProgress 事件的语法包含下面部分: 

部分 
描述 

object 
对象表达式,其值是WinSock控件的对象。 

bytesSent 
从上次激活事件以来已发送的字节数。 

bytesRemaining 
在发送缓冲区等待发送时的字节数。 

二十六、SocketHandle 属性 
返回一个与套接字句柄对应的值,控件用套接字句柄同 Winsock 层通信。在设计时是只读的,而且是不可用的。 

语法:object.SocketHandle 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

数据类型Long 

说明 

这个属性是为了传递到 Winsock APIs 而设计的。 

二十七、State 属性(Winsock 控件) 
返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。 

语法:object.State 

object 所在处代表一个对象表达式,其值是WinSock控件的对象。 

数据类型:Integer 

设置值 

State 属性的设置值是: 

常数 
值 
描述 

SckClosed 
0 
缺省的。关闭 

SckOpen 
1 
打开 

SckListening 
2 
侦听 

SckConnectionPending 
3 
连接挂起 

SckResolvingHost 
4 
识别主机 

SckHostResolved 
5 
已识别主机 

SckConnecting 
6 
正在连接 

SckConnected 
7 
已连接 

SckClosing 
8 
同级人员正在关闭连接 

SckError 
9 
错误 





VB中WinSock的属性、方法和事件

希望下面这些资料能够帮助菜菜们迅速提高网络编程的能力::) 

*属性
-------------------------------------------------------------------------
LocalHostName | 本地机器名
LocalIP | 本地机器IP地址
LocalPort | 本地机器通信程序的端口(0<端口<65536)
RemoteHost | 远程机器名
RemotePort | 远程机器的通信程序端口
state | 连接的当前状态(文后有详细说明)
Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)
--------------------------------------------------------------------------
*方法
--------------------------------------------------------------------------
Listen
Listen方法用于服务器程序,等待客户访问。
格式:Winsock对象.listen 
Connect
Connect方法用于向远程主机发出连接请求
格式:Winsock对象.connect [远程主机IP,远程端口]
Accept
Accept方法用于接受一个连接请求
格式:Winsock对象.accept Request ID
Senddata
此方法用于发送数据
格式:Winsock对象.senddata 数据
Getdata
用来取得接收到的数据
格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]
Close
关闭当前连接
格式:Winsock对象.close
*事件
----------------------------------------------------------------------------
Close | 远程机器关闭连接时触发
Connect | 连接建立好,可以进行通信时触发(客户端)
ConnectRequest | 有请求连接到达时产生(服务器端)
DataArrival | 有数据到达时触发
Error | 发生错误时发生
SendProgress | 数据传送进度

相关教程