在VB中WINSOCK的使用方法

時間 2021-08-11 18:17:34

1樓:昔俊能

給你個例子,自己看著做吧

下列步驟建立一個非常簡單的伺服器:

要建立一個 tcp 伺服器,請按照以下步驟執行:

建立新的 standard exe 工程。

將預設窗體的名稱改為 frmserver。

將窗體的標題改為「tcp 伺服器」。

在窗體中放入一個 winsock 控制元件,並將它的名字改為 tcpserver。

在窗體上新增兩個 textbox 控制元件。將第一個命名為 txtsenddata,第二個為 txtoutput。

為窗體新增如下的**。

private sub form_load()

'將 localport 屬性設定為一個整數。

'然後呼叫 listen 方法。

tcpserver.localport = 1001

tcpserver.listen

frmclient.show '顯示客戶端的窗體。

end sub

private sub tcpserver_connectionrequest _

(byval requestid as long)

'檢查控制元件的 state 屬性是否為關閉的。

'如果不是,

'在接受新的連線之前先關閉此連線。

if tcpserver.state <> sckclosed then _

tcpserver.close

'接受具有 requestid 引數的

'連線。

tcpserver.accept requestid

end sub

private sub txtsenddata_change()

'名為 txtsenddata 的 textbox 控制元件中

'包含了要傳送的資料。當使用者往文字框中

'鍵入資料時,使用 senddata 方法

'傳送輸入的字串。

tcpserver.senddata txtsenddata.text

end sub

private sub tcpserver_dataarrival _

(byval bytestotal as long)

'為進入的資料宣告一個變數。

'呼叫 getdata 方法,並將資料賦予名為 txtoutput

'的 textbox 的 text 屬性。

dim strdata as string

tcpserver.getdata strdata

txtoutput.text = strdata

end sub

上面的步驟建立了一個簡單的伺服器應用程式。為了使它能夠工作,還必須為它建立一個客戶端的應用程式。

要建立 tcp 客戶端,請按照以下步驟執行:

在工程中新增一個新的窗體,將其命名為 frmclient。

將窗體的標題改為「tcp client」。

在窗體中新增一個 winsock 控制元件,並將其命名為 tcpclient。

在 frmclient 中新增兩個 textbox 控制元件。將第一個命名為 txtsend,第二個為 txtoutput。

在窗體上放一個 commandbutton 控制元件,並將其命名為 cmdconnect。

將 commandbutton 控制元件的標題改為 connect。

在窗體中新增如下的**。

重點 必須將 remotehost 屬性值修改為您的計算機的名字。

private sub form_load()

'winsock 控制元件的名字為 tcpclient。

'注意:要指定遠端主機,可以使用

' ip 地址(例如:"121.111.1.1"),也可以使用

'計算機的「好聽的名字」如下所示。

tcpclient.remotehost = "remotecomputername"

tcpclient.remoteport = 1001

end sub

private sub cmdconnect_click()

'呼叫 connect 方法,初始化連線。

tcpclient.connect

end sub

private sub txtsenddata_change()

tcpclient.senddata txtsend.text

end sub

private sub tcpclient_dataarrival _

(byval bytestotal as long)

dim strdata as string

tcpclient.getdata strdata

txtoutput.text = strdata

end sub

上面的**建立了一個簡單的客戶/伺服器模式的應用程式。我們可以將兩者都執行起來:執行工程,然後單擊「連線」。

在兩個窗體之一的 txtsenddata 文字框中鍵入文字,可以看到同樣的文字將出現在另一個窗體的 txtoutput 文字框中。

接受多個連線請求

上面設計的基本伺服器只能接受一個連線請求。通過建立控制元件陣列,使用一個控制元件也可以同時接受多個連線請求。利用這種方法,不需要關閉連線,而只需建立新的控制元件例項(通過設定其索引屬性),然後在新的例項上呼叫 accept 方法。

下面的**假定名為 sckserver 的窗體上有一個 winsock 控制元件,它的 index 屬性被設定為 0;因此控制元件是控制元件陣列的一部分。在宣告部分,宣告瞭一個模組級的變數 intmax。在窗體的 load 事件中,intmax 被設定為 0,陣列中第一個控制元件的 localport 屬性被設定為 1001。

然後呼叫控制元件的 listen 方法,使之成為「監聽」控制元件。在連線請求到達時,**將檢測 index 是否為 0(「監聽」控制元件的值)。如果為 0,監聽控制元件將增加 intmax 的值,並使用該號碼來建立新的控制元件例項。

然後,使用新的控制元件例項接受連線請求。

private intmax as long

private sub form_load()

intmax = 0

sckserver(0).localport = 1001

sckserver(0).listen

end sub

private sub sckserver_connectionrequest _

(index as integer, byval requestid as long)

if index = 0 then

intmax = intmax + 1

load sckserver(intmax)

sckserver(intmax).localport = 0

sckserver(intmax).accept requestid

load txtdata(intmax)

end if

end sub

udp 初步

建立 udp 應用程式比建立 tcp 應用程式還要簡單,因為 udp 協議不需要顯式的連線。在上面的 tcp 應用程式中,一個 winsock 控制元件必須顯式地進行「監聽」,另一個必須使用 connect 方法初始化連線。

udp 協議不需要顯式的連線。要在兩個控制元件中間傳送資料,需要完成以下的三步(在連線的雙方):

將 remotehost 屬性設定為另一臺計算機的名稱。

將 remoteport 屬性設定為第二個控制元件的 localport 屬性。

呼叫 bind 方法,指定使用的 localport。(下面將詳細地討論該方法。)

因為兩臺計算機的地位可以看成「平等的」,這種應用程式也被稱為點到點的。為了具體說明這個問題,下面將建立一個「聊天」應用程式,兩個人可以通過它進行實時的交談。

要建立一個 udp 夥伴,請按照以下步驟執行:

建立一個新的 standard exe 工程。

將預設的窗體的名稱修改為 frmpeera。

將窗體的標題修改為「peer a」。

在窗體中放入一個 winsock 控制元件,並將其命名為 u***eera。

在「屬性」頁上,單擊「協議」並將協議修改為 u***rotocol。

在窗體中新增兩個 textbox 控制元件。將第一個命名為 txtsend,第二個命名為 txtoutput。

為窗體增加如下的**。

private sub form_load()

'控制元件的名字為 u***eera

with u***eera

'重點:必須將 remotehost 的值

'修改為計算機的名字。

.remotehost= "peerb"

.remoteport = 1001 '連線的埠號。

.bind 1002 '繫結到本地的埠。

end with

frmpeerb.show '顯示第二個窗體。

end sub

private sub txtsend_change()

'在鍵入文字時,立即將其傳送出去。

u***eera.senddata txtsend.text

end sub

private sub u***eera_dataarrival _

(byval bytestotal as long)

dim strdata as string

u***eera.getdata strdata

txtoutput.text = strdata

end sub

要建立第二個 udp 夥伴,請按照以下步驟執行:

在工程中新增一個標準窗體。

將窗體的名字修改為 frmpeerb。

將窗體的標題修改為「peer b」。

在窗體中放入一個 winsock 控制元件,並將其命名為 u***eerb。

在「屬性」頁上,單擊「協議」並將協議修改為「u***rotocol」。

在窗體上新增兩個 textbox 控制元件。將第一個命名為 txtsend,第二個命名為 txtoutput。

在窗體中新增如下的**。

private sub form_load()

'控制元件的名字為 u***eerb。

with u***eerb

'重點:必須將 remotehost 的值改為

'計算機的名字。

.remotehost= "peera"

.remoteport = 1002 '要連線的埠。

.bind 1001 '繫結到本地的埠上。

end with

end sub

private sub txtsend_change()

'在鍵入後立即傳送文字。

u***eerb.senddata txtsend.text

end sub

private sub u***eerb_dataarrival _

(byval bytestotal as long)

dim strdata as string

u***eerb.getdata strdata

txtoutput.text = strdata

end sub

如果要試用上面的例子,按 f5 鍵執行工程,然後在兩個窗體的 txtsend textbox 中分別鍵入一些文字。鍵入的文字將出現在另一個窗體的 txtoutput textbox 中。

關於 bind 方法

在上面的**中,在建立 udp 應用程式時呼叫了 bind 方法,這是必須的。bind 方法的作用是為控制元件「保留」一個本地埠。例如,如果將控制元件繫結到 1001 號埠,那麼其它應用程式將不能使用該埠進行「監聽」。

該方法阻止其它應用程式使用同樣的埠。

bind 方法的第二個引數是任選的。如果計算機上存在多個網路介面卡,可以用 localip 引數來指定使用哪一個介面卡。如果忽略該引數,控制元件使用的將是計算機上「控制面板」設定中「網路」控制面板對話方塊中列出的第一個介面卡。

在使用 udp 協議的時候,可以任意地改變 remotehost 和 remoteport 屬性,同時始終保持繫結在同一個 localport 上。tcp 協議與此不同,在改變 remotehost 和 remoteport 屬性之前,必須先關閉連線。

VB裡關於mid函式的使用,vb中的mid函式

首次提問,結果是 software 追問,結果是 e mid 字串,m,n 返回字串的第m位起共n位的子字串。vb中的mid函式 mid是visual basic和microsoft excel中的一個字串函式,作用是從一個字串中擷取出指定數量的字元。這個函式的3個引數各在vb和excel中互相等價...

VB中如何設定超連結,vb如何使用超連結開啟網頁

shell 函式 執行一個可執行檔案,返回一個 variant double 如果成功的話,代表這個程式的任務 id,若不成功,則會返回 0。語法shell pathname windowstyle shell 函式的語法含有下面這些命名引數 部分 描述 pathname 必要引數。variant ...

vb中left函式的使用,VB net裡為何不能使用Left 函式 求大神指點

left 函式,返回 variant string 其中包含字串中從左邊算起指定數量的字元。left 函式示例 本示例使用 left 函式來得到某字串最左邊的幾個字元。dim anystring,mystr anystring hello world 定義字串。mystr left anystrin...