當前位置:編程學習大全網 - 源碼下載 - 局域網發送消息源代碼

局域網發送消息源代碼

看看關於MSDN Winsock控件的部分。

-

使用Winsock控件

WinSock控件可用於建立與遠程計算機的連接,並通過用戶數據報協議(UDP)或傳輸控制協議(TCP)交換數據。這兩種協議都可以用來創建客戶端和服務器應用程序。與計時器控件類似,WinSock控件在運行時是不可見的。

可能的用途

創建收集用戶信息的客戶端應用程序,並將收集的信息發送到中央服務器。

創建壹個服務器應用程序作為多個用戶數據的導入點。

創建聊天應用程序。

選擇通信協議

使用WinSock控件時,首先要考慮的是使用什麽協議。可以使用的協議包括TCP和UDP。這兩種協議的重要區別在於它們的連接狀態:

TCP協議控制是壹種基於連接的協議,可以與電話系統相提並論。在開始數據傳輸之前,用戶必須建立連接。

UDP協議是壹種無連接協議,兩臺計算機之間的傳輸類似於郵件的傳遞:消息從壹臺計算機發送到另壹臺計算機,但它們之間沒有明確的連接。此外,壹次傳輸的最大數據量取決於具體的網絡。

選擇哪種協議通常由需要創建的應用程序決定。以下問題將有助於選擇合適的協議:

在發送和接收數據時,應用程序需要從客戶端或服務器獲得確認信息嗎?如有必要,在發送和接收數據之前,使用TCP協議建立清晰的連接。

數據量是不是特別大(比如圖像和聲音文件)?連接建立後,TCP協議會維護連接並保證數據的完整性。然而,這種連接需要更多的計算資源,因此它是“昂貴的”。

數據傳輸是間歇的還是在壹個會話中?例如,如果應用程序需要在任務完成時通知計算機,UDP協議更適合。UDP協議適用於發送少量數據。

協議設置

在設計時,可以按如下方式設置應用程序使用的協議:在“屬性”窗口中單擊“協議”,然後選擇sckTCPProtocol或sckUDPProtocol。您還可以使用程序代碼來設置協議屬性,如下所示:

Winsock1。Protocol = sckTCPProtocol

確定計算機的名稱

當與遠程計算機連接時,您需要知道它的IP地址或它的“好聽的名字”。壹個IP地址是壹串數字,每三個數字為壹組,用點分隔(比如XXX。XXX。XXX)。通常,最容易記住的就是電腦的“好聽的名字”。

要確定計算機的名稱,請按照下列步驟操作:

在計算機的任務欄上,單擊開始。

在設置項目中,單擊控制面板。

雙擊網絡圖標。

單擊標識選項卡。

您可以在“計算機名”框中找到計算機的名稱。

上面找到的計算機名可以用作RemoteHost屬性的值。

TCP連接初步

如果壹個應用程序想要使用TCP協議,它必須首先決定該應用程序是服務器還是客戶端。如果妳想創建壹個服務器端,那麽應用程序需要“監聽”指定的端口。當客戶端發出連接請求時,服務器可以接受請求並建立連接。連接建立後,客戶端和服務器可以自由地相互通信。

以下步驟創建了壹個非常簡單的服務器:

要創建TCP服務器,請按照下列步驟操作:

創建壹個新的標準EXE項目。

將默認窗體的名稱更改為frmServer。

將表單的標題更改為“TCP服務器”。

在表單中放置壹個Winsock控件,並將其名稱更改為tcpServer。

向窗體添加兩個TextBox控件。將第壹個命名為txtSendData,第二個命名為txtOutput。

將下面的代碼添加到窗體中。

私有子窗體_Load()

將LocalPort屬性設置為整數。

然後調用Listen方法。

tcpServer。LocalPort = 1001

tcpServer。聽

“顯示”顯示客戶端的表單。

末端接頭

私有Sub TCP server _ connection request _

(ByVal requestID為Long)

檢查控件的State屬性是否已關閉。

如果沒有,

在接受新連接之前,請關閉此連接。

如果tcpServer。狀態& lt& gtsckClosed Then _

tcpServer。關閉

接受帶有requestID參數的。

連接。

tcpServer。接受requestID

末端接頭

私有Sub txtSendData_Change()

在名為txtSendData的TextBox控件中。

包含要發送的數據。當用戶輸入文本框時

鍵入數據時使用SendData方法。

發送輸入字符串。

tcpServer。發送數據txtSendData。文本

末端接頭

私有Sub tcpServer_DataArrival _

(ByVal bytesTotal為Long)

為傳入的數據聲明壹個變量。

調用GetData方法,並將數據命名為txtOutput。

的文本框的文本屬性。

Dim strData作為字符串

tcpServer。GetData strData

txtOutput。Text = strData

末端接頭

以上步驟創建了壹個簡單的服務器應用程序。為了讓它工作,您還必須為它創建壹個客戶端應用程序。

要創建TCP客戶端,請按照下列步驟操作:

向項目中添加壹個新窗體,並將其命名為frmClient。

將表單的標題更改為“TCP客戶端”。

向窗體中添加壹個Winsock控件,並將其命名為tcpClient。

向frmClient添加兩個TextBox控件。將第壹個命名為txtSend,第二個命名為txtOutput。

在窗體上放置壹個CommandButton控件,並將其命名為cmdConnect。

將CommandButton控件的標題更改為Connect。

將下面的代碼添加到窗體中。

將RemoteHost屬性的值更改為您的計算機名稱非常重要。

私有子窗體_Load()

Winsock控件的名稱是tcpClient。

註意:要指定遠程主機,可以使用

也可以使用IP地址(例如:“121.11.1”)。

電腦的“好聽名字”如下。

tcpClient。RemoteHost = "RemoteComputerName "

tcpClient。RemotePort = 1001

末端接頭

Private Sub cmdConnect_Click()

調用Connect方法來初始化連接。

tcpClient。連接

末端接頭

私有Sub txtSendData_Change()

tcpClient。SendData txtSend。文本

末端接頭

私有Sub tcpClient_DataArrival _

(ByVal bytesTotal為Long)

Dim strData作為字符串

tcpClient。GetData strData

txtOutput。Text = strData

末端接頭

上面的代碼創建了壹個簡單的客戶機/服務器應用程序。我們可以兩者都運行:運行項目並單擊Connect。在兩個表單之壹的txtSendData文本框中鍵入文本,可以看到相同的文本將出現在另壹個表單的txtOutput文本框中。

接受多個連接請求

上面設計的基本服務器只能接受壹個連接請求。通過創建控件數組,壹個控件還可以同時接受多個連接請求。使用此方法,您不需要關閉連接,只需創建壹個新的控件實例(通過設置其index屬性),然後在新實例上調用Accept方法。

下面的代碼假定名為sckServer的窗體上有壹個Winsock控件,並且其Index屬性設置為0;因此,控件是控件數組的壹部分。在聲明部分,聲明了壹個模塊級變量intMax。在窗體的Load事件中,intMax設置為0,數組中第壹個控件的LocalPort屬性設置為1001。然後調用控件的Listen方法,使其成為“listening”控件。當連接請求到達時,代碼將檢測索引是否為0(“listening”控件的值)。如果為0,偵聽控件將增加intMax的值,並使用該值創建壹個新的控件實例。然後,使用新的控件實例接受連接請求。

Private intMax As Long

私有子窗體_Load()

intMax = 0

sckServer(0)。LocalPort = 1001

sckServer(0)。聽

末端接頭

私有Sub sck server _ connection request _

(Index為整數,ByVal requestID為長整型)

如果索引= 0,則

intMax = intMax + 1

加載sckServer(intMax)

sckServer(intMax)。本地端口= 0

sckServer(intMax)。接受requestID

加載txtData(intMax)

如果…就會結束

末端接頭

UDP初步

創建UDP應用程序比創建TCP應用程序容易,因為UDP協議不需要顯式連接。在上面的TCP應用程序中,壹個Winsock控件必須顯式“偵聽”,另壹個必須使用Connect方法來初始化連接。

UDP協議不需要顯式連接。要在兩個控件之間發送數據,您需要完成以下三個步驟(在連接的兩端):

將RemoteHost屬性設置為另壹臺計算機的名稱。

將RemotePort屬性設置為第二個控件的LocalPort屬性。

調用Bind方法來指定要使用的LocalPort。(這種方法將在下面詳細討論。)

因為兩臺計算機的狀態可以視為“平等”,所以這種應用程序也稱為點對點為了說明這個問題,我們將創建壹個“聊天”應用程序,通過它兩個人可以進行實時對話。

要創建UDP合作夥伴,請按照下列步驟操作:

創建壹個新的標準EXE項目。

將默認表單的名稱更改為frmPeerA。

將表格的標題更改為“同級A”。

在窗體中放置壹個Winsock控件,並將其命名為udpPeerA。

在“屬性”頁上,單擊“協議”,並將協議修改為UDPProtocol。

向窗體添加兩個TextBox控件。將第壹個命名為txtSend,第二個命名為txtOutput。

將下面的代碼添加到窗體中。

私有子窗體_Load()

該控件的名稱為udpPeerA。

與udpPeerA

重要提示:必須更改RemoteHost的值。

更改為計算機的名稱。

。RemoteHost= "PeerB "

。RemotePort = 1001 '連接的端口號。

. bind1002”被綁定到本地端口。

以…結尾

“顯示”顯示第二種形式。

末端接頭

私有Sub txtSend_Change()

鍵入時發送文本。

烏培拉。SendData txtSend。文本

末端接頭

私有子更新_數據到達_

(ByVal bytesTotal為Long)

Dim strData作為字符串

烏培拉。GetData strData

txtOutput。Text = strData

末端接頭

要創建第二個UDP夥伴,請按照下列步驟操作:

將標準表單添加到項目中。

將表單的名稱更改為frmPeerB。

將表格的標題更改為“同級B”。

在窗體中放置壹個Winsock控件,並將其命名為udpPeerB。

在“屬性”頁上,單擊“協議”,並將協議修改為UDPProtocol。

向窗體添加兩個TextBox控件。將第壹個命名為txtSend,第二個命名為txtOutput。

將下面的代碼添加到窗體中。

私有子窗體_Load()

該控件的名稱為udpPeerB。

與udpPeerB

重要提示:您必須將RemoteHost的值更改為。

計算機的名稱。

。RemoteHost= "PeerA "

。RemotePort = 1002 '要連接的端口。

“Bind 1001”被綁定到本地端口。

以…結尾

末端接頭

私有Sub txtSend_Change()

打字後立即發送文本。

udpPeerB。SendData txtSend。文本

末端接頭

私有Sub udpPeerB_DataArrival _

(ByVal bytesTotal為Long)

Dim strData作為字符串

udpPeerB。GetData strData

txtOutput。Text = strData

末端接頭

如果想試試上面的例子,按F5運行項目,然後在兩個窗體的txtSend文本框中鍵入壹些文本。您鍵入的文本將出現在另壹個表單的txtOutput文本框中。

關於綁定方法

在上面的代碼中,創建UDP應用程序時需要調用Bind方法。Bind方法用於為控件“保留”壹個本地端口。例如,如果壹個控件綁定到端口1001,其他應用程序將無法“偵聽”該端口。這種方法可以防止其他應用程序使用同壹端口。

Bind方法的第二個參數是可選的。如果您的計算機上有多個網絡適配器,您可以使用LocalIP參數來指定要使用的適配器。如果省略此參數,控件將使用計算機上“控制面板設置”的“網絡控制面板”對話框中列出的第壹個適配器。

使用UDP協議時,可以隨意更改RemoteHost和RemotePort的屬性,始終保持綁定到同壹個LocalPort。TCP協議與此不同。在更改RemoteHost和RemotePort的屬性之前,必須先關閉連接。

  • 上一篇:謝謝 可通達信與同花順的附圖怎麽不壹樣啊 能改成同花順壹樣的附圖嗎?
  • 下一篇:為什麽要學 Python?
  • copyright 2024編程學習大全網