日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何利用Winsock控件编写自己的Internet程序

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何利用Winsock控件编写自己的Internet程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VB自帶的Winsock控件是一個非常強大的工具,利用它你可以在你的程序中使用各種Internet協議。如果你對網絡協議及計算機之間通信的原理有所了解的話,理論上講你可以編寫任何Internet程序。本文向你介紹如何使用Winsock控件以及如何通過它來使用幾乎所有的Internet協議,例如 HTTP (WWW), FTP, NNTP (News), SMTP和POP3 (Mail).

?????? 讓我們先來看看兩臺計算機通信的模型。一臺是客戶機,另一臺是服務器。


?????? 所有必需的軟件被裝在客戶端計算機上??蛻舳擞嬎銠C可以收發電子郵件信息,瀏覽WWW網頁,參加新聞組討論以及通過FTP從服務器上下載文件。這些軟件共存于一臺機中并相互影響。


?????? 另一種軟件被安裝在服務器上。這類軟件向遠程客戶端計算機提供服務。服務器可同時響應多個客戶計算機的服務請求。換句話說,服務器能在同一時間扮演幾個服務器的程序,如FTP服務器, WWW服務器和郵件服務器。

?????? 由于Socket技術,使得同時穩定運行幾個Internet應用程序成為可能。Socket在MS Windows中的應用被稱為Windows Socket或干脆叫Winsock. Socket是一個程序設備,它允許你通過TCP/IP端口為某個網絡應用程序接收或發送數據。程序可按需要產生足夠數量的Socket,但是一個Socket必須對應一個TCP/IP端口。


?????? 客戶端計算機產生一個socket并隨機分配給它一個TCP/IP端口,該socket就利用這個端口來進行工作。但在服務器端,卻不是這樣做的。作為一條規則,服務器端的應用程序是用預先定義好的TCP/IP端口來工作。比如說:FTP服務器的端口號為21,WWW服務器的端口號為80. 下表列出了常用協議的默認端口號

協議 端口號 描述
SMTP 25 Simple Mail Transfer Protocol?
POP3 110 Post Office Protocol
NNTP 119 Network News Transfer Protocol
FTP 21 File Transfer Protocol
HTTP 80 Hyper Text Transfer Protocol??


?????? 客戶端計算機與服務器是通過其中一個網絡協議來開始網絡進程的??蛻魴C首先產生一個socket并利用它來同服務器建立連接。socket取得服務器的地址及要進行連接的端口號。對Winsock控件來講,你必須用它的Connect方法。下面這個代碼表示同一個FTP服務器進行連接。

Winsock1.Connect "ftp.microsoft.com", 21

?????? 正如你所見,該方法包括兩個參數,第一個是遠程服務器的名稱或IP地址。第二個是端口號,它規定了你想從遠程服務器那里獲得哪種服務。在這里,21號端口是FTP服務器正在偵聽的端口號。所謂偵聽就是說服務器應用程序等待來自21號端口的客戶機的服務請求。如果連接成功,Winsock控件會產生一個Connect事件。

接下來的事件根據你使用的網絡協議不同而不同。

?????? 服務器等待你的命令 (HTTP) 據所使用的協議,服務器發送所要求的數據并斷開連接服務器向客戶端計算機發送歡迎信息及代碼(FTP, SMTP, POP3, NNTP),表示服務器現在等待接收你的命令服務器向客戶端計算機發送不能維持現有連接的消息及代碼(FTP, SMTP, POP3, NNTP) 在連接期間,服務器會向客戶端計算機發送消息,而我們要做的就是接收并處理這些消息。在Winsock控件中,主要通過其DataArrival事件來進行。

Dim strData As String
Winsock1.GetData strData

?????? 上面的最后一行代碼的作用是從緩沖中讀取服務器傳來的數據并儲存在strData變量中。然后你就可以根據需要處理信息了。

?????? 同服務器建立連接并從服務器處獲得第一條消息后,你就可以通過向服務器發送命令及等待其響應的形式同服務器進行通話了。下面是一個同MS FTP服務器進行通話的例子。

Client: Tries to make connection with ftp.microsoft.com (port 21)
Server: Accepts connection and sends first response to client
Server: 220 ftp Microsoft FTP Service (Version 3.0).
Client: USER anonymous
Server: 331 Anonymous access allowed, send identity (e-mail name) as password.
Client: PASS gdal@comset.net
Server: 230 Anonymous user logged in.
Client: CWD developr
Server: 250 CWD command successful.
???????
?????? 為了向服務器發送數據,你需要用到SendData方法,下面是一個發送上面例子中第一條命令的例子:

Winsock1.SendData "USER anonymous" & vbCrLf

?????? 所有的命令,規則及命令順序都可在RFC (request for commants)文件中找到。

協議 RFC 地址
SMTP? 821 http://www.faqs.org/rfcs/rfc821.html
POP3? 1725 http://www.faqs.org/rfcs/rfc1725.html
NNTP 977 http://www.faqs.org/rfcs/rfc977.html
FTP? 959 http://www.faqs.org/rfcs/rfc959.html
HTTP? 2068 http://www.faqs.org/rfcs/rfc2068.html?

?????? 每個協議都有自己的一套命令及回應。盡管如此,你在開發程序時仍需遵循一些基本的規則。

?????? 命令是大小寫敏感的一些命令需要參數,在命令與參數之間要留空格命令必須以vbCrLf結尾來自服務器的回應以字符和數字組成。附加的文本取決于服務器所用的軟件,但是數字代碼是常量。你要處理的就是這些數字。這些數字由三位數組成,服務器的回應以這三個數字開頭,因此用LEFT函數就可方便地截取這三個數字。例如:
strResponseCode = Left$(strServerResponse, 3).?
?????? 關于斷開連接。通常用QUIT命令來斷開同服務器的連接。發送了QUIT命令后,服務器會傳回最后一條消息并關閉連接。對于Winsock而言,會產生一個Close事件。

?????? 最后需要注意的一點是錯誤處理。你需要注意兩類錯誤。一類是應用的協議的錯誤,如果使用了不正確的命令就會產生這個錯誤,從服務器返回的消息代碼中可得知此類錯誤。另一類錯誤是Winsows Socket錯誤。對于這類錯誤,Winsock控件會產生一個Error事件。

?????? 如果你對該控件有足夠的認識的話,可看看Winsock Terminal示例程序,然后你就可以學習更復雜的協議了。

轉載于:https://www.cnblogs.com/Track/archive/2005/09/25/243767.html

總結

以上是生活随笔為你收集整理的如何利用Winsock控件编写自己的Internet程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。