国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于WinSock的網(wǎng)絡(luò)編程技術(shù)

2009-10-11 07:28:24邱育橋
電腦知識(shí)與技術(shù) 2009年14期

邱育橋

摘要:介紹了VB中Winsock控件的屬性、方法、事件,并示例性地說(shuō)明在VB中用 Winsock控件實(shí)現(xiàn)網(wǎng)絡(luò)通信的一種簡(jiǎn)易方法。

關(guān)鍵詞:網(wǎng)絡(luò)編程;Winsock控件;TCP協(xié)議;UDP協(xié)議

中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)14-3695-02

Based on Winsock Control ofNetwork Programming Technology

QIU Yu-qiao

(Department of chemistry, Qiongzhou University, Wuzhishan 572200, China)

Abstract: The attribute, method and event of Winsock control in VB has been introduced. And a simplemethod of the use of Winsock control to realize network communication ispresented.

Key words: Winsock control; TCP; UDP; network communication

近幾年來(lái),計(jì)算機(jī)網(wǎng)絡(luò)的應(yīng)用越來(lái)越廣泛,網(wǎng)絡(luò)應(yīng)用軟件的開發(fā)需求與日俱增。在網(wǎng)絡(luò)編程時(shí),常常會(huì)遇到客戶端之間或者客戶端和服務(wù)器之間的信息互傳問題。 常用的解決方法是利用 Socket套接字?jǐn)?shù)據(jù)通信來(lái)進(jìn)行點(diǎn)對(duì)點(diǎn)的文件傳輸。Windows Socket作為一個(gè)開放的、支持多種協(xié)議的 Windows下的網(wǎng)絡(luò)編程接口已經(jīng)得到了普遍的應(yīng)用。 采用這種方法較為簡(jiǎn)便,卻能做到在互通的網(wǎng)絡(luò)中任何兩臺(tái)計(jì)算機(jī)之間的文件共享和傳輸。

1 Winsock控件介紹

Winsock是在1991年由JSB公司Marting Hall所提出的。Windows Sockets是指在MS Windows下發(fā)展網(wǎng)絡(luò)程序的應(yīng)用程序接口(API),并通過(guò)傳輸控制協(xié)議TCP和數(shù)據(jù)文報(bào)協(xié)議UDP進(jìn)行數(shù)據(jù)交換。 TCP協(xié)議是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比,在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接;UDP協(xié)議則是一個(gè)無(wú)連接、不可靠的協(xié)議,跟TCP操作不同,計(jì)算機(jī)并不建立連接。 如果你所傳輸?shù)臄?shù)據(jù)可靠性是要求較高的,請(qǐng)選用TCP協(xié)議進(jìn)行通信,否則可以選用UDP協(xié)議進(jìn)行通信。 選用TCP進(jìn)行通信需要更多的系統(tǒng)資源。 本文著重對(duì)其TCP協(xié)議的應(yīng)用進(jìn)行討論。

2 Winsock控件的常用屬性、方法和事件

1) Winsock控件的屬性:

LocalHostName/RemoteHost:本地/遠(yuǎn)程 主機(jī)名;

LocalPort/RemotePort:本地/遠(yuǎn)程 機(jī)使用的端口號(hào);

Protocol:設(shè)置通信所使用的協(xié)議( TCP或UDP);

State:控件當(dāng)前的狀態(tài)

2) Winsock 控件的方法:

Connect/Accept/Listen:發(fā)送/接收/監(jiān)聽一個(gè)連接請(qǐng)求;

GetData/SendData:獲取/發(fā)送數(shù)據(jù);

Close:關(guān)閉一個(gè)TCP連接;

3) Winsock控件的事件:

Close:遠(yuǎn)程主機(jī)已關(guān)閉觸發(fā)此事件;

ConnectRequest:連接請(qǐng)求到達(dá)觸發(fā)此事件;

DataArrival:數(shù)據(jù)到達(dá)觸發(fā)此事件;

3 Winsock控件的工作原理及過(guò)程

使用TCP協(xié)議創(chuàng)建客戶應(yīng)用程序,確定服務(wù)器計(jì)算機(jī)名或者 IP地址(RemoteHost屬性)及其監(jiān)聽的端口(RemotePort屬性),然后調(diào)用 Connect方法發(fā)送連接請(qǐng)求;服務(wù)器端應(yīng)用程序,則設(shè)置一個(gè)監(jiān)聽端口(LocalPort屬性),并調(diào)用 Listen方法監(jiān)聽連接請(qǐng)求,當(dāng)客戶計(jì)算機(jī)需要連接時(shí)就會(huì)發(fā)生 ConnectionRequest事件,為完成連接,可在ConnectionRequest事件中調(diào)用 Accept方法。 建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)??烧{(diào)用 SendData方法發(fā)送數(shù)據(jù);當(dāng)接收數(shù)據(jù)時(shí)會(huì)發(fā)生 DataArrival事件,在DataArrival事件中調(diào)用 GetData方法就可獲取數(shù)據(jù)。一個(gè) TCP連接需要客戶機(jī)和服務(wù)器都要有一個(gè) IP地址和端口,所標(biāo)識(shí)的端口一定不能再讓其它應(yīng)用程序使用。

UDP協(xié)議創(chuàng)建連接,首先要設(shè)置客戶計(jì)算機(jī)的 LocalPort屬性,然后服務(wù)器計(jì)算機(jī)需將 RemoteHost設(shè)置為客戶計(jì)算機(jī)的 Internet地址,將 RemotePort屬性設(shè)置為跟客戶計(jì)算機(jī)的 LocalPort屬性相同的端口,并調(diào)用 SendData方法來(lái)發(fā)送信息,GetData方法來(lái)獲取已發(fā)送的信息。由于UDP協(xié)議沒有建立連接,通信效率高,但可靠性不如 TCP協(xié)議,使用 UDP發(fā)送消息,有時(shí)會(huì)出現(xiàn)收不到消息的情況。

4 Winsock控件的實(shí)例編程

下面實(shí)例介紹WinSock控件采用TCP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的一種簡(jiǎn)單編程方法。

4.1 服務(wù)器端應(yīng)用程序

1) 新建“標(biāo)準(zhǔn) EXE”工程。

2) 在窗體上放入一個(gè) winsock控件,并將它的名字改為:tcpServer。

3) 在窗體上放兩個(gè) TextBox控件。

4) 代碼及注釋如下:

Private Sub Form_Load()

tcpServer.LocalPort = 2001 '端口

tcpServer.Listen'監(jiān)聽

End Sub

Private Sub tcpServer_ConnectionRequest (ByVal requestID As Long)

If tcpServer.State <> sckClosed Then tcpServer.Close

' 使收到對(duì)方連接請(qǐng)求之前保持關(guān)閉狀態(tài)

tcpServer.Accept requestID '建立連接

End Sub

Private Sub tcpServer_DataArrival (ByVal bytesTotal As Long)

Dim strDataAs String

tcpServer.GetData strData '接收信息

txtOutput.Text = strData

End Sub

Private SubtxtSendData_Change()

tcpServer.Send DatatxtSendData.Text '發(fā)送信息

EndSub

4.2 TCP客戶端的建立

1) 在工程中添加一個(gè)新的窗體,在窗體上添加一個(gè)Winsock控件其命名為tcpClient。

2) 在窗體上添加2個(gè)TextBox控件和2個(gè)CommandButton控件。

3) 代碼及注釋如下:

Private Subcmdconnect_Click()'建立連接命令按鈕

tcpClient.Connect

End Sub

PrivateSubcmdSent_Click()'發(fā)送信息命令按鈕

tcpClient.SendData txtsend.Text

EndSub

Private Sub Form_Load()

tcpClient.RemoteHost="qiuyuqiao"

tcpClient.RemotePort=2001

'設(shè)置遠(yuǎn)程主機(jī)名(或 IP地址)和端口號(hào)

End Sub

Private SubtcpClient_Close()

MsgBox"服務(wù)器已關(guān)閉"

EndSub

PrivateSubtcpClient_Connect()

MsgBox"連接成功"

EndSub

PrivateSubtcpClient_DataArriva(ByValbytesTotalAsLong)

Dim str As String

tcpClient.GetData str

txtoutput.Text=str

EndSub

上面設(shè)計(jì)的基本服務(wù)器只能接收一個(gè)連接請(qǐng)求。一般來(lái)說(shuō),客戶端是不止一個(gè)的,如果每一個(gè)客戶端都使用一個(gè)端口連接時(shí),那么有上百個(gè)或更多的客戶時(shí)就需要許多個(gè)Wnsock控件與之相對(duì)應(yīng)。其實(shí)可以通過(guò)創(chuàng)建控件數(shù)組,使用一個(gè)控件也可以同時(shí)接收多個(gè)連接請(qǐng)求。利用這種方法,不需要關(guān)閉連接,而只需要?jiǎng)?chuàng)建新的控件實(shí)例(通過(guò)設(shè)置其索引屬性),然后在新的實(shí)例上調(diào)用 Accept方法。在這就不再做詳細(xì)的論述。

5 結(jié)束語(yǔ)

以上的實(shí)例是使用VB Winsock編程實(shí)現(xiàn)計(jì)算機(jī)網(wǎng)絡(luò)中點(diǎn)對(duì)點(diǎn)通信。Winsock技術(shù)的出現(xiàn)極好地屏蔽了網(wǎng)絡(luò)低層復(fù)雜的結(jié)構(gòu)和協(xié)議,這使得基于Winsock的網(wǎng)絡(luò)應(yīng)用程序可以在不同類型的網(wǎng)絡(luò)上運(yùn)行,同時(shí)使Winsock成為網(wǎng)絡(luò)編程的最流行技術(shù)。

參考文獻(xiàn):

[1] 王曉平, 鐘軍. VisualBasic網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn)[M].北京:人民郵電出版社,2003.

[2] 高俊光. 基于VB的Winsock控件的原理與應(yīng)用[J]. 應(yīng)用科技,2004;31(3):13-14.

[3] 黃玲玲,楊剴,王穎. 在VB中使用Winsock控件實(shí)現(xiàn)局域網(wǎng)通信[J].信息技術(shù),2005(6):24-26.

长沙县| 吴堡县| 屯留县| 万荣县| 丰镇市| 会同县| 舒兰市| 秦安县| 新余市| 汉源县| 迁安市| 将乐县| 嘉鱼县| 剑河县| 民丰县| 阿拉善盟| 邹平县| 白银市| 手游| 武川县| 蒙阴县| 德兴市| 湖北省| 深圳市| 漳浦县| 泽普县| 兴宁市| 怀柔区| 宁乡县| 左权县| 新泰市| 新宾| 三门县| 梅州市| 玉树县| 邹城市| 定西市| 漳浦县| 南昌市| 博客| 灌阳县|