logo资料库

Winsock控件的属性、方法、事件.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
Winsock控件的属性、方法、事件
1.Winsock控件的属性
(1)BytesReceived属性
(2)LocalHostName属性
(3)LocalIP属性
(4)LocalPort属性
(5)Protocol属性
TCP基础
UDP基础
(6)RemoteHost属性
(7)RemoteHostIP属性
(8)RemotePort属性
(9)SocketHandle属性
(10)State属性
2.Winsock控件的方法
(1)Accept方法
(2)Bind方法
(3)Close方法
(4)Connect方法
(5)GetData方法
(6)Listen方法
(7)PeekData方法
(8)SendData方法
3.Winsock控件的事件
(1)Close事件
(2)Connect事件
(3)ConnectionRequest事件
(4)DataArrival事件
(5)Error事件
(6)SendComplete事件
(7)SendProgress事件
如何使用 Winsock 控件进行常用网络应用开发 Winsock 控件的属性、方法、事件 1.Winsock 控件的属性 (1)BytesReceived 属性 数值型。返回接收到的(当前在接收端缓冲区内的)数据的数量。使用 GetData 方法来 获取数据。该属性在设计时是只读的,而且不可用。 (2)LocalHostName 属性 字符型。返回本地机器名。该属性在设计时是只读的,而且不可用。 (3)LocalIP 属性 字符型。返回本地机器的 IP 地址,格式是 IP 地址加点字符串(xxx.xxx.xxx.xxx)。该属 性在设计时是只读的,而且不可用。 (4)LocalPort 属性 数值型。返回或者设置所用到的本地端口。该属性在设计时是可读/写的,而且是可用的。 对客户来说,该属性指定发送数据的本地端口。如果应用程序不需要特定端口,则指定 0 为端口号。在这种情况下,控件将选择一个随机端口。在建立起连接之后,这就是用于 TCP 连接的本地端口。 对于服务器来说,这是用于侦听的本地端口。如果指定的是端口 0,就使用一个随机端 口。在调用了 Listen 方法后,属性就包含了已选定的实际端口。 在计算机之间常用端口 0 来动态地建立连接。例如,一个客户希望服务器给他"回电话", 它就可用端口 0 获得新的(随机)端口号,然后将该端口号交给远程计算机,从而达到目的。 (5)Protocol 属性 数值型。返回或设置 Winsock 控件所使用的协议,0 表示为 TCP 协议,1 表示为 UDP 协议,缺省值为 0。 ○1 TCP 基础 数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据 传输。 如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性), 还要知道进行"侦听"的端口(RemotePort 属性),然后调用 Connect 方法。 如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。 当 客 户 计 算 机 需 要 连 接 时 就 会 发 生 ConnectionRequest 事 件 。 为 了 完 成 连 接 , 可 调 用 ConnectionRequest 事件内的 Accept 方法。 建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。 当接收数据时会发生 DataArrival 事件,调用 DataArrival 事件内的 GetData 方法就可获取数 据。 ○2 UDP 基础 用户数据文报协议(UDP)是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连 1
帮助手册 接。另外 UDP 应用程序可以是客户机,也可以是服务器。 为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机 的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使 用 DataArrival 事件内的 GetData 方法来获取已发送的信息。 (6)RemoteHost 属性 字符型。返回或设置远程计算机,控件向它发送数据或从它那里接收数据。既可提供主 机名,比如"ftp://ftp.microsoft.com",也可提供点格式下的 IP 地址字符串,如"100.0.1.1"。 (7)RemoteHostIP 属性 字符型。返回远程机器的 IP 地址。 对于客户应用程序来说,已经用 Connect 方法建立连接后,属性就包含了远程机器的 IP 字符串。 对于服务器应用程序来说,在请求连接(ConnectionRequest 事件)之后,属性包含远程 计算机的 IP 字符串,该字符串启动了连接。 当使用 UDP 协议时,在 DataArrival 事件出现之后,属性包含了发送 UDP 数据的计算机 的 IP 地址。 (8)RemotePort 属性 数值型。返回或设置要连接的远程端口号。 在设置 Protocol 属性时,将对每个协议自动把 RemotePort 属性设置成适当的缺省端口。 表 7-17 列出了一些常用缺省端口号。 表 7-17 常用协议/服务缺省端口号 端口号 80 21 110 25 119 23 194 53 49 162 69 118 协议/服务 HTTP(Hyper Text Transfer Protocol) FTP(File Transfer Protoco) POP3(Post Office Protocol version 3) SMTP(Simple Mail Transfer Protocol) NNTP(Network News Transfer Protocol) TELNET(Telnet) IRC(Internet Relay Chat) DNS(Domain Name Server) Login(Login Host Protocol) SNMP ( Simple Network Management Protocol) TFTP(Trivial File Transfer) SQLSERV(SQL Services) (9)SocketHandle 属性 说明 超文本传输协议 文件传输协议 邮局协议 简单邮件传输协议 网络新闻传输协议 远程登录 因特网中继交谈(用于适时聊天) 域名服务器 登录主机协议 简单网络管理协议 简单文件传输协议 SQL 服务 数值型。返回一个与套接字句柄对应的值,控件用套接字句柄同 Winsock 层通信。在设 计时是只读的,而且不可用。 该属性是为了传递到 Winsock APIs 而设计的。 2
如何使用 Winsock 控件进行常用网络应用开发 (10)State 属性 数值型。返回控件的状态。在设计时是只读的,而且不可用。 State 属性的返回值如表 7-18 所示。 常量 sckClosed sckOpen sckListening sckConnectionPending sckResolvingHost sckHostResolved sckConnecting sckConnected sckClosing sckError 表 7-18 返回值 0 1 2 3 4 5 6 7 8 9 State 属性的返回值 说明 缺省的。关闭 打开 侦听 连接挂起 识别主机 已识别主机 正在连接 已连接 同级人员正在关闭连接 错误 2.Winsock 控件的方法 (1)Accept 方法 仅适用于 TCP 服务器应用程序,在处理 ConnectionRequest 事件时用这个方法接受新连 接。  语法 object.Accept(requestID)  参数 requestID 数值型。新连接请求标识。  返回值 无。  说明 在 ConnectionRequest 事件中使用 Accept 方法。ConnectionRequest 事件有一个对应的参 数,即 RequestID 参数,该参数应该传给 Accept 方法。请看下例: PROCEDURE ConnectionRequest LPARAMETERS RequestID IF This.OBJECT.State#0 &&测试 State 属性,如果当前连接是打开的话,关闭连接 This.OBJECT.Close This.OBJECT.Accept(RequestID) ENDIF ENDPROC (2)Bind 方法 指定用于 TCP 连接的 LocalPort 和 LocalIP。如果有多协议适配卡,使用该方法。  语法 object.Bind (LocalPort, LocalIP) 3
帮助手册  参数 LocalPort 数值型。用来建立连接的端口。 LocalIP 字符型。用来建立连接的本地 Internet 地址。  返回值 无。  说明 在调用 Listen 方法之前必须调用 Bind 方法。 (3)Close 方法 对客户机和服务器应用程序关闭 TCP 连接或侦听套接字。  语法 object.Close  参数 无。  返回值 无。 (4)Connect 方法 请求一个到远程计算机的连接。  语法 object.Connect (RemoteHost, RemotePort)  参数 RemoteHost 字符型。必需的,要连接的远程计算机的名称或 IP 地址。 RemotePort 数值型。要连接的远程计算机的端口。  返回值 无。  说明 在要建立一个 TCP 连接时调用该方法。 (5)GetData 方法 获取当前缓冲中的数据块并将其存储在变体类型的变量中,并清空缓冲。  语法 object.GetData (Data, [Type,] [MaxLen])  参数 Data 在方法成功返回之后存储获取数据的地方。如果对请求的类型没有足够可用的数据,则 将 data 设置成 Empty。 Type 可选的。获取的数据类型。可用的设置值如表 7-19 所示。 表 7-19 常量 设置值 17 Type 参数可用的设置值 说明 Byte vbByte 4
如何使用 Winsock 控件进行常用网络应用开发 vbInteger vbLong vbSingle vbDouble vbCurrency vbDate vbBoolean vbError vbString vbArray + vbByte 可选的。在接收到字节数组或字符串时所需大小。如果对字节数组或字符串、参数丢失、 Integer Long Single Double Currency Date Boolean SCODE String Byte Array 2 3 4 5 6 7 11 10 8 8192+17 则将获取所有可用数据。如果提供的数据类型不是字节数组或字符串,则忽略这个参数。  返回值 无。  说明 通常总是将 GetData 方法与 DataArrival 事件并用,而 DataArrival 事件包含 TotalBytes 参数。如果指定一个比 TotalBytes 参数小的 Maxlen,则将得到警告 10040,以此指出剩余的 字节将丢失。 (6)Listen 方法 创建套接字并将其设置为侦听模式,该方法仅适用于 TCP 连接。  语法 object.Listen  参数 无。  返回值 无。  说明 当有新连接时就会出现 ConnectionRequest 事件。处理 ConnectionRequest 事件时,应用 程序应该用 Accept 方法接受连接。 (7)PeekData 方法 用缓冲中的内容填充变量, 但不清空缓冲,除了这一点之外,方法与 GetData 相似。该 方法仅适用于 TCP 连接。  语法 object.PeekData (Data, [Type,] [MaxLen])  参数 Data 在方法成功地返回之后存储获取的数据。如果对于没有足够的适于所请求的类型来说没 有足够可用的数据,那么 Data 将被设置为 Empty。 Type 可选的。所获取的数据类型,可用设置值如表 7-19 所示。缺省值为:vbArray + vbByte。 MaxLen 可选的。在收到字节数组或字符串时,长度指定了所需要的大小。如果对字节数组或字 符串的参数丢失,则将获取所有可用的数据。如果提供的数据类型不是字节数组和字符串的 5
帮助手册 话,则忽略该参数。  返回值 无。  说明 如果所指定的类型为 vbString,则在返回到用户之前,字符串数据将转化成 UNICODE。 (8)SendData 方法 将数据发送给远程计算机。  语法 object.SendData (Data)  参数 Data 要发送的数据。对于二进制数据应使用字节数组。  返回值 无。  说明 当传进 UNICODE 字符串并在网络上发送出去之前,将转化成 ANSI 字符串。 3.Winsock 控件的事件 (1)Close 事件 当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。  语法 PROCEDURE Close ENDPROC  参数 无。 (2)Connect 事件 当一个 Connect 操作完成时发生。  语法 PROCEDURE Connect ENDPROC  参数 无。  说明 使用 Connect 事件确认已经成功建立了一个连接。 (3)ConnectionRequest 事件 当远程计算机请求连接时出现。仅适用于 TCP 服务器应用程序,在请求一个新连接时激 活该事件。激活事件之后,RemoteHostIP 和 RemotePort 属性存储有关客户的信息。  语法 PROCEDURE ConnectionRequest LPARAMETERS RequestID ENDPROC  参数 6
如何使用 Winsock 控件进行常用网络应用开发 RequestID 新连接请求标识。  说明 服务器可决定是否接受连接。如果不接受新连接,则同级人员(客户)将得到 Close 事 件;用 Accept 方法接受新连接。 (4)DataArrival 事件 当新数据到达时发生。  语法 PROCEDURE DataArrival LPARAMETERS BytesTotal ENDPROC  参数 BytesTotal 数值型。可获取的数据总数量。  说明 如果没有获取一个 GetData 调用中的全部数据,则事件不会出现。只有存在新数据时才 激活事件。可随时用 BytesReceived 属性检查可用的数据量。 (5)Error 事件 无论何时,只要后台处理中出现错误(例如,连接失败,或者在后台收发数据失败)事 件就会出现。  语法 PROCEDURE Error LPARAMETERS Number,Description,Scode,Source,HelpFile,HelpContext,CancelDisplay ENDPROC  参数 Number 数值型。定义错误代码的整数,可返回的错误代码如表 7-20 所示。 常量 sckOutOfMemory sckInvalidPropertyValue sckGetNotSupported sckSetNotSupported sckBadState sckInvalidArg sckSuccess sckUnsupported sckInvalidOp sckOutOfRange sckWrongProtocol sckOpCanceled sckInvalidArgument 表 7-20 错误代码 错误代码 描述 7 380 394 383 40006 40014 40017 40018 40020 40021 40026 1004 10014 内存不足 属性值无效 属性不可读 属性是只读的 所请求的事务或请求本身的错误协议或者错误连接状态 传递给函数的参数格式不确定,或者不在指定范围内 成功 不受支持的变量类型 在当前状态下的无效操作 参数越界 所请求的事务或请求本身的错误协议 取消操作 所请求的地址是广播地址,但未设置标记 7
帮助手册 描述符不是套接字 数据报太大,不适于缓冲区的要求,因而被截断 来自本地机器的不可用地址 网络子系统失败 通过远端重新设置连接 没有可用的缓冲空间 不支持指定的端口 地址在使用中 已连接套接字 未连接套接字 已关闭套接字 已关闭套接字 此时不能从主机到达网络 在设置 SO_KEEPALIVE 时连接超时 由于超时或者其它失败而中止连接 套接字不成块,而指定操作将使之成块 制造块的 Winsock 操作在进行之中 完成操作。未进行制造块的操作 10035 10036 10037 10038 10040 10043 10048 10049 10050 10051 10052 11053 10054 10055 10056 10057 10058 10060 10061 10093 11001 11002 11003 11004 sckWouldBlock sckInProgress sckAlreadyComplete sckNotSocket sckMsgTooBig sckPortNotSupported sckAddressInUse sckAddressNotAvailable sckNetworkSubsystemFailed sckNetworkUnreachable sckNetReset sckConnectAborted sckConnectionReset sckNoBufferSpace sckAlreadyConnected sckNotConnected sckSocketShutdown sckTimedout sckConnectionRefused sckNotInitialized sckHostNotFound sckHostNotFoundTryAgain sckNonRecoverableError sckNoData Description 字符型。包含错误信息的字符串。 Scode 数值型。长 SCODE。 Source 字符型。描述错误来源的字符串。 HelpFile 字符型。包含帮助文件名的字符串。 HelpContext 数值型。Help 文件上下文。 CancelDisplay 逻辑型。指示是否取消显示。缺省值为.F.,以此显示缺省的错误信息框。如果不想使用 强行拒绝连接 应首先调用 WinsockInit 授权应答:未找到主机 非授权应答:未找到主机 不可恢复的错误 无效名,对所请求的类型无数据记录 缺省的信息框,则将 CancelDisplay 设置成.T.。 (6)SendComplete 事件 在完成一个发送操作时发生。  语法 PROCEDURE SendComplete ENDPROC  参数 8
分享到:
收藏