真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vb.nettcp控件 vbnet tabcontrol控件用法

用vb.net實(shí)現(xiàn)網(wǎng)絡(luò)通信

用 vb.net socket通信

嵩縣網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

Dim th As Threading.Thread

2 Dim tcpl As System.Net.Sockets.TcpListener

3

4 Private Sub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

5 th = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf MyListen))

6 th.Start()

7 End Sub

8

9 Public Sub SendMessage()Sub SendMessage(ByVal IP As String, ByVal SendMsg As String)

10 Try

11 If IP "" Then

12 Dim tcpc As New System.Net.Sockets.TcpClient(IP, 5656)

13 Dim tcpStream As Net.Sockets.NetworkStream = tcpc.GetStream

14 Dim reqStream As New IO.StreamWriter(tcpStream)

15 reqStream.Write(SendMsg)

16 reqStream.Flush()

17 tcpStream.Close()

18 tcpc.Close()

19 End If

20 Catch ex As Exception

21 MsgBox(ex.Message.ToString)

22 End Try

23 End Sub

24 Private Sub MyListen()Sub MyListen()

25 Try

26 Dim ipAddress As System.Net.IPAddress = System.Net.Dns.Resolve(System.Net.Dns.GetHostName).AddressList(0)

27 tcpl = New System.Net.Sockets.TcpListener(ipAddress, 5656)

28 tcpl.Start()

29 While True

30 Dim s As System.Net.Sockets.Socket = tcpl.AcceptSocket()

31 Dim MyBuffer(1024) As Byte

32 Dim i As Integer

33 i = s.Receive(MyBuffer)

34 If i 0 Then

35 Dim lstrRec As String

36 Dim j As Integer

37 For j = 0 To i - 1

38 TextBox1.Text += Chr(MyBuffer(j)) ","

39 Next

40 End If

41 End While

42 Catch ex As Exception

43 MsgBox(ex.Message.ToString)

44 End Try

45 End Sub

46

47 Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

48 SendMessage("192.168.0.61", TextBox2.Text)

49 End Sub

VB.net如何添加winsock控件和Ado控件

步驟如下:

1. 先到C:\WINDOWS\system32目錄下看看你的系統(tǒng)里是否已經(jīng)有了MSADODC.ocx和MSDATGRD.ocx這兩個(gè)文件(多半是沒(méi)有的),要是有了就直接看第2步吧。

然后放到C:\WINDOWS\system32目錄下。

2. 在VS 2005中注冊(cè)MSADODC.ocx和MSDATGRD.ocx這兩個(gè)控件。在VS 2005中點(diǎn)擊"Tools" -- "Visual Studio 2005 Command Prompt",輸入如下命令即可:

regsvr32 msadodc.ocx

regsvr32 msdatgrd.ocx

VB實(shí)現(xiàn)TCP點(diǎn)對(duì)點(diǎn)通信(使用winsock控件)

在工程部件里添加個(gè) Microsoft Winsock Control 6.0

From1:

Private?Sub?Command1_Click()

Winsock1.SendData?Text3.Text

End?Sub

Private?Sub?Form_Load()

Text1.Text?=?""

Text2.Text?=?""

Winsock1.LocalPort?=?10001

Text1.Text?=?Winsock1.LocalIP

Winsock1.Listen

End?Sub

Private?Sub?Winsock1_ConnectionRequest(ByVal?requestID?As?Long)

Winsock1.Close

Winsock1.Accept?requestID

End?Sub

Private?Sub?Winsock1_DataArrival(ByVal?bytesTotal?As?Long)

Dim?Mystr?As?String

Winsock1.GetData?Mystr

Text2.Text?=?Text2.Text??Chr(13)??Chr(10)??Mystr

End?Sub

Form2:

Private?Sub?Command1_Click()

Winsock1.RemoteHost?=?Text2.Text

Winsock1.Connect

End?Sub

Private?Sub?Command2_Click()

Winsock1.SendData?Text4.Text

End?Sub

Private?Sub?Form_Load()

Text1.Text?=?""

Text2.Text?=?""

Text3.Text?=?""

Text4.Text?=?""

Winsock1.RemotePort?=?10001

Text1.Text?=?Winsock1.LocalIP

End?Sub

Private?Sub?Winsock1_Connect()

MsgBox?""

End?Sub

Private?Sub?Winsock1_DataArrival(ByVal?bytesTotal?As?Long)

Dim?Mystr?As?String

Winsock1.GetData?Mystr

Text3.Text?=?Text3.Text??Chr(13)??Chr(10)??Mystr

End?Sub

vb.net如何使用TCP/IP協(xié)議向服務(wù)器發(fā)送字符串,要用到什么控件和函數(shù)?

TCP協(xié)議是TCP/IP協(xié)議簇中的傳輸層中的一個(gè)協(xié)議,也是TCP/IP協(xié)議簇最為重要的協(xié)議之一。在TCP/IP協(xié)議簇中,有一個(gè)協(xié)議和TCP協(xié)議非常類(lèi)似,這就是UDP協(xié)議,網(wǎng)絡(luò)上進(jìn)行基于UDP協(xié)議的數(shù)據(jù)傳送時(shí),發(fā)送方只需知道接收方的IP地址(或主機(jī)名)和端口號(hào)就可以發(fā)送UDP數(shù)據(jù)包。而接收方只需知道發(fā)送方發(fā)送數(shù)據(jù)對(duì)應(yīng)的端口號(hào),就能夠接收UDP數(shù)據(jù)包了。傳送數(shù)據(jù)的雙方并不需要進(jìn)行連接就能夠?qū)崿F(xiàn)數(shù)據(jù)通訊,這樣就導(dǎo)致基于UDP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序,在傳送數(shù)據(jù)時(shí)無(wú)法保證可靠性、完整性和安全性。

 而TCP協(xié)議卻與之相反,TCP協(xié)議是一種面向連接的,并提供可靠的、完整的、安全的數(shù)據(jù)傳送的網(wǎng)絡(luò)協(xié)議。它提供可靠字節(jié)服務(wù)的協(xié)議。在網(wǎng)絡(luò)中通過(guò)TCP協(xié)議傳送數(shù)據(jù)之前,發(fā)送方和接收方之間必須建立連接,這種連接就是所謂的"握手"。網(wǎng)絡(luò)中TCP應(yīng)用,如同日常生活中的打電話,在通話之前,首先要撥號(hào)、震鈴(猶如發(fā)送方向接收方提出TCP連接申請(qǐng),并等待TCP連接申請(qǐng)通過(guò))。直到對(duì)方拿起電話時(shí)(發(fā)送方和接收方的TCP連接已經(jīng)建立),就可以通話了(傳送數(shù)據(jù))。本文的主要內(nèi)容就來(lái)介紹在Visual Basic .Net實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)數(shù)據(jù)傳送的一種簡(jiǎn)單的方法。

一.簡(jiǎn)介本文在實(shí)現(xiàn)TCP協(xié)議網(wǎng)絡(luò)應(yīng)用時(shí)使用的類(lèi)庫(kù):

.Net FrameWork SDK中提供了很多用以實(shí)現(xiàn)TCP協(xié)議或與之相關(guān)協(xié)議的類(lèi)庫(kù),本文就選擇五個(gè)比較典型,也是比較簡(jiǎn)單的類(lèi)加以介紹,即:TcpListener類(lèi)、TcpClient類(lèi)、NetworkStream類(lèi)、StreamReader類(lèi)和StreamWriter類(lèi)。TcpClient主要用以提出TCP連接申請(qǐng)。TcpListener主要用以偵聽(tīng)端口號(hào),并接收遠(yuǎn)程主機(jī)的TCP連接申請(qǐng)。NetworkStream類(lèi)是實(shí)現(xiàn)TCP數(shù)據(jù)傳輸?shù)幕A(chǔ)數(shù)據(jù)流,StreamReader類(lèi)作用是通過(guò)操作NetworkStream,實(shí)現(xiàn)從網(wǎng)絡(luò)接收數(shù)據(jù)。StreamWriter類(lèi)作用是通過(guò)操作NetworkStream,實(shí)現(xiàn)向網(wǎng)絡(luò)傳輸數(shù)據(jù)。

1. NetworkStream類(lèi):

NetworkStream類(lèi)主要是提供用于網(wǎng)絡(luò)訪問(wèn)的基礎(chǔ)數(shù)據(jù)流。它主要是網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)妮d體,并提供同步、異步方式來(lái)訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)流。雖然NetworkStream類(lèi)有構(gòu)造函數(shù),但在實(shí)際情況中更多是通過(guò)TcpClient實(shí)例的GetStream方法來(lái)初始化NetworkStream實(shí)例。以下就是使用TcpClient實(shí)例的GetStream方法來(lái)初始化NetworkStream實(shí)例具體代碼:

Dim tcpClient As TcpClient

Dim nsStream As NetworkStream

tcpClient = New TcpClient( "" , 8000)

''對(duì)遠(yuǎn)程主機(jī)的8000端口提出TCP連接申請(qǐng)

nsStream = tcpClient.GetStream ( )

''TCP連接建立后,獲得網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕A(chǔ)數(shù)據(jù)流

在下面介紹的程序示例中,就是利用NetworkStream作為傳送和接收數(shù)據(jù)的載體。而操作這個(gè)載體的就是StreamWriter類(lèi)和StreamReader類(lèi)。表01和表02是NetworkStream類(lèi)中一些常用的方法、屬性及其說(shuō)明。

方法 說(shuō)明 BeginRead 開(kāi)始異步讀者基礎(chǔ)數(shù)據(jù)流。 BeginWrite 開(kāi)始異步寫(xiě)入基礎(chǔ)數(shù)據(jù)流。 Close 關(guān)閉流并可選擇關(guān)閉基礎(chǔ)套接字。 EndRead 結(jié)束異步讀取。 EndWrite 結(jié)束異步寫(xiě)入。 Flush 刷新流中的數(shù)據(jù)。 Read 從流中讀取數(shù)據(jù)。 Seek 將流的當(dāng)前位置設(shè)置為給定值。 SetLength 設(shè)置流的長(zhǎng)度。 Write 將數(shù)據(jù)寫(xiě)入流。

表01:NetworkStream類(lèi)中常用的方法及其說(shuō)明

其中"BeginRead"、"EndRead"和"BeginWrite"、"EndWrite"是二對(duì)異步方法,起作用分別相當(dāng)于"Read"和"Write"方法。

屬性 說(shuō)明 CanRead 獲取當(dāng)前流是否支持讀取。 CanSeek 獲取流是否支持查找。該屬性總是返回 false。 CanWrite 獲取當(dāng)前流是否支持寫(xiě)入。 DataAvailable 獲取是否可以在流上讀取數(shù)據(jù)。 Length 流上可用數(shù)據(jù)的長(zhǎng)度。 Position 獲取或設(shè)置流中的當(dāng)前位置。

表02:NetworkStream類(lèi)中屬性及其說(shuō)明

2. StreamReader類(lèi):

StreamReader類(lèi)能夠?qū)崿F(xiàn)對(duì)基礎(chǔ)數(shù)據(jù)流的讀操作,從而實(shí)現(xiàn)對(duì)經(jīng)過(guò)基礎(chǔ)數(shù)據(jù)流傳送來(lái)的數(shù)據(jù)。表03是StreamReader類(lèi)的常用的方法及其說(shuō)明:

方法 說(shuō)明 Close 關(guān)閉StreamReader并釋放與閱讀器關(guān)聯(lián)的所有系統(tǒng)資源。 DiscardBufferedData 允許StreamReader丟棄其當(dāng)前數(shù)據(jù)。 Peek 返回下一個(gè)可用的字符,但不使用它。 Read 讀取輸入流中的下一個(gè)字符或下一組字符。 ReadBlock 從當(dāng)前流中讀取最大數(shù)量的字符并從索引開(kāi)始將該數(shù)據(jù)寫(xiě)入緩沖區(qū)。 ReadLine 從當(dāng)前流中讀取一行字符并將數(shù)據(jù)作為字符串返回。 ReadToEnd 從流的當(dāng)前位置到末尾讀取流。

表03:NetworkStream類(lèi)中常用的方法及其說(shuō)明

3. StreamWriter類(lèi):

StreamWriter類(lèi)能夠?qū)崿F(xiàn)對(duì)基礎(chǔ)數(shù)據(jù)流的寫(xiě)操作,從而實(shí)現(xiàn)提供基礎(chǔ)數(shù)據(jù)流來(lái)傳送數(shù)據(jù)。表04是StreamWriter類(lèi)的常用方法及其說(shuō)明:

方法 說(shuō)明 Close 關(guān)閉當(dāng)前的StreamWriter和基礎(chǔ)流。 Flush 清理當(dāng)前編寫(xiě)器的所有緩沖區(qū),并使所有緩沖數(shù)據(jù)寫(xiě)入基礎(chǔ)流。 Write 寫(xiě)入基礎(chǔ)數(shù)據(jù)流。 WriteLine 寫(xiě)入重載參數(shù)指定的某些數(shù)據(jù),后跟行結(jié)束符。

表04:StreamWriter類(lèi)的常用方法及其說(shuō)明

4.TcpClient 類(lèi):

TcpClient 類(lèi)主要為T(mén)CP網(wǎng)絡(luò)服務(wù)提供客戶(hù)端連接。TcpClient是類(lèi)基于Socket類(lèi)構(gòu)建,

它以更高的抽象程度提供TCP服務(wù)。TcpClient 提供了通過(guò)網(wǎng)絡(luò)連接、發(fā)送和接收數(shù)據(jù)的簡(jiǎn)單方法。表05和表06分別是TcpClient類(lèi)常用方法、屬性及其說(shuō)明。

方法 說(shuō)明 Close 關(guān)閉 TCP 連接 Connect 使用指定的主機(jī)名和端口號(hào)將客戶(hù)端連接到 TCP主機(jī) GetStream 返回用于發(fā)送和接收數(shù)據(jù)的流

表05:TcpClient類(lèi)常用的方法

屬性 描述 LingerState 有關(guān)套接字逗留時(shí)間的信息 NoDelay 一個(gè)值,該值在發(fā)送或接收緩沖區(qū)未滿(mǎn)時(shí)啟用延遲 ReceiveBufferSize 接收緩沖區(qū)的大小 ReceiveTimeout TcpClient在啟動(dòng)后為接收數(shù)據(jù)而等待的時(shí)間長(zhǎng)度 SendBufferSize 發(fā)送緩沖區(qū)的大小 SendTimeout 在您啟動(dòng)發(fā)送操作后TcpClient將為接收確認(rèn)而等待的時(shí)間長(zhǎng)度

表06:TcpClient類(lèi)常用的屬性

5.TcpListener 類(lèi):

TcpListener類(lèi)的主要作用是從TCP網(wǎng)絡(luò)客戶(hù)端偵聽(tīng)連接,TcpListener類(lèi)基于Socket 類(lèi)

提供更高理念級(jí)別的TCP服務(wù)??梢允褂肨cpListener從TCP客戶(hù)端偵聽(tīng)連接。像 FTP 和 HTTP 這樣的應(yīng)用層協(xié)議是在 TcpListener 類(lèi)的基礎(chǔ)上建立的。表7和表8分別是TcpListener類(lèi)常用方法、屬性及其說(shuō)明:

方法 說(shuō)明 AcceptSocket 接受掛起的連接請(qǐng)求 AcceptTcpClient 接受掛起的連接請(qǐng)求 Pending 確定是否有掛起的連接請(qǐng)求 Start 開(kāi)始偵聽(tīng)網(wǎng)絡(luò)請(qǐng)求 Stop 關(guān)閉偵聽(tīng)器表7:TcpListener 類(lèi)常用的方法

屬性 說(shuō)明 LocalEndpoint 獲取當(dāng)前TcpListener的基礎(chǔ)EndPoint Active 獲取一個(gè)值,該值指示 TcpListener 是否正主動(dòng)偵聽(tīng)客戶(hù)端連接 Server 獲取基礎(chǔ)網(wǎng)絡(luò)Socket

表8:TcpListener 類(lèi)常用的屬性

二.Visual Basic .Net實(shí)現(xiàn)基于TCP協(xié)議數(shù)據(jù)傳送程序的體系結(jié)構(gòu):

在下面介紹的用Visual Basic .Net實(shí)現(xiàn)基于TCP協(xié)議的數(shù)據(jù)傳送程序是由二個(gè)子程序組成的。也可以看成是服務(wù)器端程序和客戶(hù)端程序,其中:服務(wù)器端程序的功能是偵聽(tīng)端口號(hào),接收遠(yuǎn)程主要的TCP連接申請(qǐng),并接收遠(yuǎn)程主機(jī)傳送來(lái)的文字?jǐn)?shù)據(jù)。另外一個(gè)子程序,也就是所謂的客戶(hù)端程序,主要實(shí)現(xiàn)向網(wǎng)絡(luò)的遠(yuǎn)程主機(jī)提出TCP連接申請(qǐng),并在連接申請(qǐng)通過(guò)后,向遠(yuǎn)程主機(jī)傳送文字?jǐn)?shù)據(jù)。下面來(lái)詳細(xì)介紹Visual Basic .Net實(shí)現(xiàn)TCP協(xié)議網(wǎng)絡(luò)數(shù)據(jù)傳送的服務(wù)器端程序和客戶(hù)端程序的具體步驟。

三.服務(wù)器端程序的具體實(shí)現(xiàn)步驟:

服務(wù)器端程序的實(shí)現(xiàn)關(guān)鍵在于偵聽(tīng)端口號(hào),接收遠(yuǎn)程主機(jī)的TCP連接申請(qǐng),獲得網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕A(chǔ)數(shù)據(jù)流,并通過(guò)基礎(chǔ)數(shù)據(jù)流接收數(shù)據(jù)。接收數(shù)據(jù)使用的是StreamReader中ReadLine方法,由于ReadLine方法是一個(gè)阻塞式的方法,所以在下面具體的實(shí)現(xiàn)步驟中,是接收數(shù)據(jù)是在創(chuàng)建的線程中完成的,具體可參閱下面實(shí)現(xiàn)步驟中的第十一和十二步。以下是Visual Basic .Net實(shí)現(xiàn)TCP協(xié)議客戶(hù)端程序?qū)崿F(xiàn)的具體步驟:

1. 啟動(dòng)Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對(duì)話框。

3. 將【項(xiàng)目類(lèi)型】設(shè)置為【Visual Basic項(xiàng)目】。

4. 將【模板】設(shè)置為【W(wǎng)indows應(yīng)用程序】。

5. 在【名稱(chēng)】文本框中輸入【服務(wù)器端程序】。

6. 在【位置】的文本框中輸入【E:\VS.NET項(xiàng)目】,然后單擊【確定】按鈕,這樣在"E:\VS.NET項(xiàng)目"目錄中就產(chǎn)生了名稱(chēng)為"服務(wù)器端程序"的文件夾,并在里面創(chuàng)建了名稱(chēng)為"服務(wù)器端程序"的項(xiàng)目文件。

7. 把Visual Studio .Net的當(dāng)前窗口切換到【Form1.vb(設(shè)計(jì))】窗口,并從【工具箱】中的【W(wǎng)indows窗體組件】選項(xiàng)卡中往Form1窗體中拖入下列組件,并執(zhí)行相應(yīng)的操作:

一個(gè)Label組件。

一個(gè)StatusBar組件。

一個(gè)ListBox組件。

一個(gè)Button組件,并在這個(gè)Button組件拖入Form1的設(shè)計(jì)窗體后,雙擊它,則系統(tǒng)會(huì)在Form1.vb文件分別產(chǎn)生這個(gè)組件的Click事件對(duì)應(yīng)的處理代碼。

8. 按照表05所示調(diào)整窗體中各組件屬性的數(shù)值:

組件類(lèi)型 組件名稱(chēng) 屬性 設(shè)置結(jié)果 Form Form1 Text 服務(wù)器端程序 Form1 MaximizeBox False Form1 FormBorderStyle FixedSingle Button Button1 Text 啟動(dòng)服務(wù) Button1 FlatStyle Flat Label Label1 Text 服務(wù)尚未啟動(dòng) StatusBar StatusBar1 Text 無(wú)連接!表05:【服務(wù)器端程序】項(xiàng)目中組件設(shè)定數(shù)值表

 9. 把Visual Studio .Net的當(dāng)前窗口切換到Form1.vb的代碼編輯窗口,并在Form1.vb文件的最前面添加下列代碼,下列代碼在Form1.vb中導(dǎo)入程序中要使用的類(lèi)所在的命名空間:

Imports System.Net.Sockets

''使用到TcpListen類(lèi)

Imports System.Threading

''使用到線程

Imports System.IO

''使用到StreamReader類(lèi)

10. 在Form1.vb中創(chuàng)建各種可視組件的代碼中添加下列代碼,下列代碼的作用是創(chuàng)建全局使用的實(shí)例和變量:

Private iPort As Integer = 8000

''定義偵聽(tīng)端口號(hào)

Private thThreadRead As Thread

''創(chuàng)建線程,用以偵聽(tīng)端口號(hào),接收信息

Private tlTcpListen As TcpListener

''偵聽(tīng)端口號(hào)

Private blistener As Boolean = True

''設(shè)定標(biāo)示位,判斷偵聽(tīng)狀態(tài)

Private nsStream As NetworkStream

''創(chuàng)建接收的基本數(shù)據(jù)流

Private srRead As StreamReader

''從網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)流中讀取數(shù)據(jù)

Private tcClient As TcpClient

11. 在Form1.vb中的InitializeComponent過(guò)程之后添加下列代碼,下列代碼的作用是定義Listen過(guò)程,此過(guò)程的作用是偵聽(tīng)本地機(jī)的8000端口號(hào),接受網(wǎng)絡(luò)主機(jī)的TCP連接申請(qǐng),并接收從建立申請(qǐng)的遠(yuǎn)程主機(jī)發(fā)送來(lái)的文本數(shù)據(jù):

Private Sub Listen ( )

Try

 tlTcpListen = New TcpListener ( iPort )

 ''以8000端口號(hào)來(lái)初始化TcpListener實(shí)例

 tlTcpListen.Start ( )

 ''開(kāi)始監(jiān)聽(tīng)

 StatusBar1.Text = "正在監(jiān)聽(tīng)..."

 tcClient = tlTcpListen.AcceptTcpClient ( )

 ''通過(guò)TCP連接請(qǐng)求

 nsStream = tcClient.GetStream ( )

 ''獲取用以發(fā)送、接收數(shù)據(jù)的網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)流

 srRead = New StreamReader ( nsStream )

 ''以得到的網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)流來(lái)初始化StreamReader實(shí)例

 StatusBar1.Text = "已經(jīng)建立TCP連接!"

 ''循環(huán)偵聽(tīng)

 While blistener

Dim sMessage As String = srRead.ReadLine ( )

''從網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)流中讀取一行數(shù)據(jù)

If ( sMessage = "STOP" ) Then

 tlTcpListen.Stop ( )

 ''關(guān)閉偵聽(tīng)

 nsStream.Close ( )

 srRead.Close ( )

 ''釋放資源

 StatusBar1.Text = "無(wú)連接!"

 thThreadRead.Abort ( )

 ''中止線程

 Return

Else

 ''判斷是否為斷開(kāi)TCP連接控制碼

 Dim sTime As String = DateTime.Now.ToShortTimeString ( )

 ''獲取接收數(shù)據(jù)時(shí)的時(shí)間

 ListBox1.Items.Add ( sTime + " " + sMessage )

End If

 End While

Catch ex As System.Security.SecurityException

 MessageBox.Show ( "偵聽(tīng)失敗!" , "錯(cuò)誤" )

End Try

End Sub

12. 用下列代碼替換Form1.vb中的Button1的Click事件對(duì)應(yīng)的處理代碼,下列代碼功能是用上面定義的Listen過(guò)程來(lái)初始化并啟動(dòng)線程,接收建立TCP連接的遠(yuǎn)程主機(jī)發(fā)送來(lái)的文本數(shù)據(jù):

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click

 thThreadRead = New Thread ( New ThreadStart ( AddressOf Listen ) )

 ''以Listen過(guò)程來(lái)初始化線程實(shí)例

 thThreadRead.Start ( )

 ''啟動(dòng)線程

 Button1.Enabled = False

 Label1.Text = "服務(wù)已經(jīng)啟動(dòng)!"

 Label1.ForeColor = Color.Red

End Sub

13. 用下列代碼替換Form1.vb中的Dispose過(guò)程,下面代碼的作用是重新定義Dispose過(guò)程,在Dispose過(guò)程手動(dòng)清除使用的資源,回收垃圾:

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )

 Try

thThreadRead.Abort ( ) ''中止線程

tlTcpListen.Stop ( ) ''關(guān)閉偵聽(tīng)

tcClient.Close ( )

nsStream.Close ( )

srRead.Close ( ) ''釋放資源

 Catch

 End Try

 If disposing Then

If Not ( components Is Nothing ) Then

 components.Dispose ( )

End If

 End If

 MyBase.Dispose ( disposing )

End Sub

14. 至此在上述步驟都正確執(zhí)行后,【服務(wù)器端程序】項(xiàng)目的全部工作就完成了。編譯、生成可執(zhí)行文件后,接著介紹客戶(hù)端程序的實(shí)現(xiàn)步驟。

四.客戶(hù)端端程序的具體實(shí)現(xiàn)步驟:

客戶(hù)端端序的實(shí)現(xiàn)關(guān)鍵在于向網(wǎng)絡(luò)中的遠(yuǎn)程主機(jī)提出TCP連接申請(qǐng),并在申請(qǐng)通過(guò)后,得到傳輸數(shù)據(jù)的基礎(chǔ)數(shù)據(jù)流,并通過(guò)對(duì)基礎(chǔ)數(shù)據(jù)流進(jìn)行寫(xiě)操作向遠(yuǎn)程主機(jī)傳送文本數(shù)據(jù)。由于在客戶(hù)端程序中沒(méi)有使用阻塞式的方法,所以程序中沒(méi)有使用到線程。對(duì)遠(yuǎn)程主機(jī)提出TCP連接申請(qǐng)的具體實(shí)現(xiàn)方法請(qǐng)參閱以下第步;對(duì)基礎(chǔ)數(shù)據(jù)流進(jìn)行寫(xiě)操作,從而實(shí)現(xiàn)向遠(yuǎn)程主機(jī)傳送文本數(shù)據(jù)的方法請(qǐng)參閱以下第步。下面客戶(hù)端程序的具體實(shí)現(xiàn)步驟:

1. 啟動(dòng)Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對(duì)話框。

3. 將【項(xiàng)目類(lèi)型】設(shè)置為【Visual Basic項(xiàng)目】。

4. 將【模板】設(shè)置為【W(wǎng)indows應(yīng)用程序】。

5. 在【名稱(chēng)】文本框中輸入【客戶(hù)端程序】。

6. 在【位置】的文本框中輸入【E:\VS.NET項(xiàng)目】,然后單擊【確定】按鈕,這樣在"E:\VS.NET項(xiàng)目"目錄中就產(chǎn)生了名稱(chēng)為"客戶(hù)端程序"的文件夾,并在里面創(chuàng)建了名稱(chēng)為"客戶(hù)端程序"的項(xiàng)目文件。

7. 把Visual Studio .Net的當(dāng)前窗口切換到【Form1.vb(設(shè)計(jì))】窗口,并從【工具箱】中的【W(wǎng)indows窗體組件】選項(xiàng)卡中往Form1窗體中拖入下列組件,并執(zhí)行相應(yīng)的操作:

二個(gè)Label組件。

二個(gè)TextBox組件。

一個(gè)StatusBar組件。

二個(gè)Button組件,并在這二個(gè)Button組件拖入Form1的設(shè)計(jì)窗體后,雙擊它們,則系統(tǒng)會(huì)在Form1.vb文件分別產(chǎn)生這二個(gè)組件的Click事件對(duì)應(yīng)的處理代碼。

8. 按照表01所示調(diào)整窗體中各組件屬性的數(shù)值:

組件類(lèi)型 組件名稱(chēng) 屬性 設(shè)置結(jié)果 Form Form1 Text 客戶(hù)端程序 Form1 MaximizeBox False Form1 FormBorderStyle FixedSingle Button Button1 Text 連接 Button1 FlatStyle Flat Button2 Text 發(fā)送 Button2 FlatStyle Flat Label Label1 Text 服務(wù)器IP地址: Label2 Text 信息: StatusBar StatusBar1 Text 無(wú)連接! TextBox TextBox1 Text "" TextBox1 BorderStyle FixedSingle TextBox2 Text "" TextBox2 BorderStyle FixedSingle

表06:【客戶(hù)端程序】項(xiàng)目中組件設(shè)定數(shù)值表

有任何疑問(wèn)請(qǐng)追問(wèn),滿(mǎn)意請(qǐng)采納,謝謝。


當(dāng)前題目:vb.nettcp控件 vbnet tabcontrol控件用法
文章出自:http://weahome.cn/article/doppjdi.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部