導航:首頁 > 編程大全 > 網路能傳輸字元嗎

網路能傳輸字元嗎

發布時間:2024-03-29 09:07:45

1. vb.net如何使用TCP/IP協議向伺服器發送字元串,要用到什麼控制項和函數

TCP協議是TCP/IP協議簇中的傳輸層中的一個協議,也是TCP/IP協議簇最為重要的協議之一。在TCP/IP協議簇中,有一個協議和TCP協議非常類似,這就是UDP協議,網路上進行基於UDP協議的數據傳送時,發送方只需知道接收方的IP地址(或主機名)和埠號就可以發送UDP數據包。而接收方只需知道發送方發送數據對應的埠號,就能夠接收UDP數據包了。傳送數據的雙方並不需要進行連接就能夠實現數據通訊,這樣就導致基於UDP協議的網路應用程序,在傳送數據時無法保證可靠性、完整性和安全性。
而TCP協議卻與之相反,TCP協議是一種面向連接的,並提供可靠的、完整的、安全的數據傳送的網路協議。它提供可靠位元組服務的協議。在網路中通過TCP協議傳送數據之前,發送方和接收方之間必須建立連接,這種連接就是所謂的"握手"。網路中TCP應用,如同日常生活中的打電話,在通話之前,首先要撥號、震鈴(猶如發送方向接收方提出TCP連接申請,並等待TCP連接申請通過)。直到對方拿起電話時(發送方和接收方的TCP連接已經建立),就可以通話了(傳送數據)。本文悉游灶的主要內容就來介紹在Visual Basic .Net實現基於TCP協議網路數據傳送的一種簡單的方法。

一.簡介本文在實現TCP協議網路應用時使用的類庫:

.Net FrameWork SDK中提供了很睜扮多用以實現TCP協議或與之相關協議的類庫,本文就選擇五個比較典型,也是比較簡單的類加以介紹,即:TcpListener類、TcpClient類、NetworkStream類、StreamReader類和StreamWriter類。TcpClient主要用以提出TCP連接申請。TcpListener主要用以偵聽埠號,並接收遠程主機的TCP連接申請。NetworkStream類是實現TCP數據傳輸的基礎數據流,StreamReader類作用是通過操作NetworkStream,實現從網路接收數據。StreamWriter類作用是通過操作NetworkStream,實現向網路傳輸數據。

1. NetworkStream類:

NetworkStream類主要是提供用於網路訪問的基礎數據流。它主要是網路數據傳輸的載體,並提供同步、非同步方式來訪問網路數據流。雖然NetworkStream類有構造函數,但在實際情況中更多是通過TcpClient實例的GetStream方法來初始化NetworkStream實例。以下就是使用TcpClient實例的GetStream方法來初始化NetworkStream實例具體代碼

Dim tcpClient As TcpClient
Dim nsStream As NetworkStream
tcpClient = New TcpClient( "www.microsoft.com" , 8000)
''對遠程主機的8000埠提出TCP連接申請
nsStream = tcpClient.GetStream ( )
''TCP連接建立後,獲得網路數據傳輸的基礎數據流
在下面介紹的程序示例中,就是利用NetworkStream作為傳送和接收數據的載體。而操作這個載體的就是StreamWriter類和StreamReader類。表01和表02是NetworkStream類中一些常用的方法、屬性及其說明。

方法 說明 BeginRead 開始非同步讀者基礎數據流。 BeginWrite 開始非同步寫入基礎數據流。 Close 關閉流並可選擇關閉基礎套接字。 EndRead 結束非同步讀取。 EndWrite 結束非同步寫入。 Flush 刷新流中的數據。 Read 從流中讀取數據。 Seek 將流的當前位置設置為給定值。 SetLength 設置流的長度。 Write 將數據寫入流。
表01:NetworkStream類中常用的方法及其說明

其中"BeginRead"、"EndRead"和"BeginWrite"、"EndWrite"是二對非同步方法,起作用分別相當於"Read"和"Write"方法。

屬性 說明 CanRead 獲取當前流是否支持讀取。 CanSeek 獲取流是否支持查找。該屬性總是返回 false。 CanWrite 獲取當前流是磨豎否支持寫入。 DataAvailable 獲取是否可以在流上讀取數據。 Length 流上可用數據的長度。 Position 獲取或設置流中的當前位置。
表02:NetworkStream類中屬性及其說明

2. StreamReader類:

StreamReader類能夠實現對基礎數據流的讀操作,從而實現對經過基礎數據流傳送來的數據。表03是StreamReader類的常用的方法及其說明:

方法 說明 Close 關閉StreamReader並釋放與閱讀器關聯的所有系統資源。 DiscardBufferedData 允許StreamReader丟棄其當前數據。 Peek 返回下一個可用的字元,但不使用它。 Read 讀取輸入流中的下一個字元或下一組字元。 ReadBlock 從當前流中讀取最大數量的字元並從索引開始將該數據寫入緩沖區。 ReadLine 從當前流中讀取一行字元並將數據作為字元串返回。 ReadToEnd 從流的當前位置到末尾讀取流。
表03:NetworkStream類中常用的方法及其說明

3. StreamWriter類:

StreamWriter類能夠實現對基礎數據流的寫操作,從而實現提供基礎數據流來傳送數據。表04是StreamWriter類的常用方法及其說明:

方法 說明 Close 關閉當前的StreamWriter和基礎流。 Flush 清理當前編寫器的所有緩沖區,並使所有緩沖數據寫入基礎流。 Write 寫入基礎數據流。 WriteLine 寫入重載參數指定的某些數據,後跟行結束符。
表04:StreamWriter類的常用方法及其說明

4.TcpClient 類:

TcpClient 類主要為TCP網路服務提供客戶端連接。TcpClient是類基於Socket類構建,
它以更高的抽象程度提供TCP服務。TcpClient 提供了通過網路連接、發送和接收數據的簡單方法。表05和表06分別是TcpClient類常用方法、屬性及其說明。

方法 說明 Close 關閉 TCP 連接 Connect 使用指定的主機名和埠號將客戶端連接到 TCP主機 GetStream 返回用於發送和接收數據的流
表05:TcpClient類常用的方法

屬性 描述 LingerState 有關套接字逗留時間的信息 NoDelay 一個值,該值在發送或接收緩沖區未滿時啟用延遲 ReceiveBufferSize 接收緩沖區的大小 ReceiveTimeout TcpClient在啟動後為接收數據而等待的時間長度 SendBufferSize 發送緩沖區的大小 SendTimeout 在您啟動發送操作後TcpClient將為接收確認而等待的時間長度
表06:TcpClient類常用的屬性

5.TcpListener 類:

TcpListener類的主要作用是從TCP網路客戶端偵聽連接,TcpListener類基於Socket 類
提供更高理念級別的TCP服務。可以使用TcpListener從TCP客戶端偵聽連接。像 FTP 和 HTTP 這樣的應用層協議是在 TcpListener 類的基礎上建立的。表7和表8分別是TcpListener類常用方法、屬性及其說明:

方法 說明 AcceptSocket 接受掛起的連接請求 AcceptTcpClient 接受掛起的連接請求 Pending 確定是否有掛起的連接請求 Start 開始偵聽網路請求 Stop 關閉偵聽器表7:TcpListener 類常用的方法

屬性 說明 LocalEndpoint 獲取當前TcpListener的基礎EndPoint Active 獲取一個值,該值指示 TcpListener 是否正主動偵聽客戶端連接 Server 獲取基礎網路Socket
表8:TcpListener 類常用的屬性

二.Visual Basic .Net實現基於TCP協議數據傳送程序的體系結構:

在下面介紹的用Visual Basic .Net實現基於TCP協議的數據傳送程序是由二個子程序組成的。也可以看成是伺服器端程序和客戶端程序,其中:伺服器端程序的功能是偵聽埠號,接收遠程主要的TCP連接申請,並接收遠程主機傳送來的文字數據。另外一個子程序,也就是所謂的客戶端程序,主要實現向網路的遠程主機提出TCP連接申請,並在連接申請通過後,向遠程主機傳送文字數據。下面來詳細介紹Visual Basic .Net實現TCP協議網路數據傳送的伺服器端程序和客戶端程序的具體步驟。

三.伺服器端程序的具體實現步驟:

伺服器端程序的實現關鍵在於偵聽埠號,接收遠程主機的TCP連接申請,獲得網路數據傳輸的基礎數據流,並通過基礎數據流接收數據。接收數據使用的是StreamReader中ReadLine方法,由於ReadLine方法是一個阻塞式的方法,所以在下面具體的實現步驟中,是接收數據是在創建的線程中完成的,具體可參閱下面實現步驟中的第十一和十二步。以下是Visual Basic .Net實現TCP協議客戶端程序實現的具體步驟:

1. 啟動Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項目】後,彈出【新建項目】對話框。

3. 將【項目類型】設置為【Visual Basic項目】。

4. 將【模板】設置為【Windows應用程序】。

5. 在【名稱】文本框中輸入【伺服器端程序】。

6. 在【位置】的文本框中輸入【E:\VS.NET項目】,然後單擊【確定】按鈕,這樣在"E:\VS.NET項目"目錄中就產生了名稱為"伺服器端程序"的文件夾,並在裡面創建了名稱為"伺服器端程序"的項目文件。

7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,並從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件,並執行相應的操作:

一個Label組件。
一個StatusBar組件。
一個ListBox組件。
一個Button組件,並在這個Button組件拖入Form1的設計窗體後,雙擊它,則系統會在Form1.vb文件分別產生這個組件的Click事件對應的處理代碼。

8. 按照表05所示調整窗體中各組件屬性的數值:

組件類型 組件名稱 屬性 設置結果 Form Form1 Text 伺服器端程序 Form1 MaximizeBox False Form1 FormBorderStyle FixedSingle Button Button1 Text 啟動服務 Button1 FlatStyle Flat Label Label1 Text 服務尚未啟動 StatusBar StatusBar1 Text 無連接!表05:【伺服器端程序】項目中組件設定數值表
9. 把Visual Studio .Net的當前窗口切換到Form1.vb的代碼編輯窗口,並在Form1.vb文件的最前面添加下列代碼,下列代碼在Form1.vb中導入程序中要使用的類所在的命名空間:

Imports System.Net.Sockets
''使用到TcpListen類
Imports System.Threading
''使用到線程
Imports System.IO
''使用到StreamReader類
10. 在Form1.vb中創建各種可視組件的代碼中添加下列代碼,下列代碼的作用是創建全局使用的實例和變數:

Private iPort As Integer = 8000
''定義偵聽埠號
Private thThreadRead As Thread
''創建線程,用以偵聽埠號,接收信息
Private tlTcpListen As TcpListener
''偵聽埠號
Private blistener As Boolean = True
''設定標示位,判斷偵聽狀態
Private nsStream As NetworkStream
''創建接收的基本數據流
Private srRead As StreamReader
''從網路基礎數據流中讀取數據
Private tcClient As TcpClient
11. 在Form1.vb中的InitializeComponent過程之後添加下列代碼,下列代碼的作用是定義Listen過程,此過程的作用是偵聽本地機的8000埠號,接受網路主機的TCP連接申請,並接收從建立申請的遠程主機發送來的文本數據:

Private Sub Listen ( )
Try
tlTcpListen = New TcpListener ( iPort )
''以8000埠號來初始化TcpListener實例
tlTcpListen.Start ( )
''開始監聽
StatusBar1.Text = "正在監聽..."
tcClient = tlTcpListen.AcceptTcpClient ( )
''通過TCP連接請求
nsStream = tcClient.GetStream ( )
''獲取用以發送、接收數據的網路基礎數據流
srRead = New StreamReader ( nsStream )
''以得到的網路基礎數據流來初始化StreamReader實例
StatusBar1.Text = "已經建立TCP連接!"
''循環偵聽
While blistener
Dim sMessage As String = srRead.ReadLine ( )
''從網路基礎數據流中讀取一行數據
If ( sMessage = "STOP" ) Then
tlTcpListen.Stop ( )
''關閉偵聽
nsStream.Close ( )
srRead.Close ( )
''釋放資源
StatusBar1.Text = "無連接!"
thThreadRead.Abort ( )
''中止線程
Return
Else
''判斷是否為斷開TCP連接控制碼
Dim sTime As String = DateTime.Now.ToShortTimeString ( )
''獲取接收數據時的時間
ListBox1.Items.Add ( sTime + " " + sMessage )
End If
End While
Catch ex As System.Security.SecurityException
MessageBox.Show ( "偵聽失敗!" , "錯誤" )
End Try
End Sub

12. 用下列代碼替換Form1.vb中的Button1的Click事件對應的處理代碼,下列代碼功能是用上面定義的Listen過程來初始化並啟動線程,接收建立TCP連接的遠程主機發送來的文本數據:

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過程來初始化線程實例
thThreadRead.Start ( )
''啟動線程
Button1.Enabled = False
Label1.Text = "服務已經啟動!"
Label1.ForeColor = Color.Red
End Sub
13. 用下列代碼替換Form1.vb中的Dispose過程,下面代碼的作用是重新定義Dispose過程,在Dispose過程手動清除使用的資源,回收垃圾:

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
Try
thThreadRead.Abort ( ) ''中止線程
tlTcpListen.Stop ( ) ''關閉偵聽
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. 至此在上述步驟都正確執行後,【伺服器端程序】項目的全部工作就完成了。編譯、生成可執行文件後,接著介紹客戶端程序的實現步驟。

四.客戶端端程序的具體實現步驟:

客戶端端序的實現關鍵在於向網路中的遠程主機提出TCP連接申請,並在申請通過後,得到傳輸數據的基礎數據流,並通過對基礎數據流進行寫操作向遠程主機傳送文本數據。由於在客戶端程序中沒有使用阻塞式的方法,所以程序中沒有使用到線程。對遠程主機提出TCP連接申請的具體實現方法請參閱以下第步;對基礎數據流進行寫操作,從而實現向遠程主機傳送文本數據的方法請參閱以下第步。下面客戶端程序的具體實現步驟:

1. 啟動Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項目】後,彈出【新建項目】對話框。

3. 將【項目類型】設置為【Visual Basic項目】。

4. 將【模板】設置為【Windows應用程序】。

5. 在【名稱】文本框中輸入【客戶端程序】。

6. 在【位置】的文本框中輸入【E:\VS.NET項目】,然後單擊【確定】按鈕,這樣在"E:\VS.NET項目"目錄中就產生了名稱為"客戶端程序"的文件夾,並在裡面創建了名稱為"客戶端程序"的項目文件。

7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,並從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件,並執行相應的操作:

二個Label組件。
二個TextBox組件。
一個StatusBar組件。
二個Button組件,並在這二個Button組件拖入Form1的設計窗體後,雙擊它們,則系統會在Form1.vb文件分別產生這二個組件的Click事件對應的處理代碼。

8. 按照表01所示調整窗體中各組件屬性的數值:

組件類型 組件名稱 屬性 設置結果 Form Form1 Text 客戶端程序 Form1 MaximizeBox False Form1 FormBorderStyle FixedSingle Button Button1 Text 連接 Button1 FlatStyle Flat Button2 Text 發送 Button2 FlatStyle Flat Label Label1 Text 伺服器IP地址: Label2 Text 信息: StatusBar StatusBar1 Text 無連接! TextBox TextBox1 Text "" TextBox1 BorderStyle FixedSingle TextBox2 Text "" TextBox2 BorderStyle FixedSingle
表06:【客戶端程序】項目中組件設定數值表

有任何疑問請追問,滿意請採納,謝謝。

2. 數據傳輸方式分為哪幾種

按照不同分類可以分為7種。

1、並行傳輸

並行傳輸指的是數據以成組的方式,在多條並行信道上同時進行傳輸,是在傳輸中有多個數據位同時在設備之間進行的傳輸。常用的是將構成一個字元的幾位二進制碼同時分別在幾個並行的信道上傳輸。

並行傳輸時,一次可以傳一個字元,收發雙方不存在同步的問題。而且速度快、控制方式簡單。但是,並行傳輸需要多個物理通道。所以並行傳輸只適合於短距離、要求傳輸速度快的場合使用。

2、串列傳輸

串列通信作為計算機通信方式之一,主要起到主機與外設以及主機之間的數據傳輸作用,串列通信具有傳輸線少、成本低的特點,主要適用於近距離的人-機交換、實時監控等系統通信工作當中,藉助於現有的電話網也能實現遠距離傳輸,因此串列通信介面是計算機系統當中的常用介面。

3、非同步傳輸

非同步傳輸每次傳送一個字元代碼(5~8bit),在發送每一個字元代碼的前面均加上一個「起」信號,其長度規定為1個碼元,極性為「0」,後面均加一個止信號,在採用國際電報二號碼時,止信號長度為1.5個碼元,在採用國際五號碼(見數據通信代碼)或其它代碼時,止信號長度為1或2個碼元,極性為「1」。

4、同步傳輸

同步傳輸是以固定時鍾節拍來發送數據信號的。在串列數據流中,各信號碼元之間的相對位置都是固定的,接收端要從收到的數據流中正確區分發送的字元,必須建立位定時同步和幀同步。

5、單工數據傳輸

單工數據傳輸是兩數據站之間只能沿一個指定的方向進行數據傳輸。即一端的DTE固定為數據源,另一端的DTE固定為數據宿。

6、半雙工數據傳輸

半雙工數據傳輸是兩數據站之間可以在兩個方向上進行數據傳輸,但不能同時進行。即每一端的DTE既可作數據源,也可作數據宿,但不能同時作為數據源與數據宿。

7、全雙工數據傳輸

全雙工數據傳輸是在兩數據站之間,可以在兩個方向上同時進行傳輸。即每一端的DTE均可同時作為數據源與數據宿。通常四線線路實現全雙工數據傳輸。二線線路實現單工或半雙工數據傳輸。

閱讀全文

與網路能傳輸字元嗎相關的資料

熱點內容
傳媒與大數據中心 瀏覽:943
cmd命令行高級教程 瀏覽:521
有哪些僵屍片帶黃色的 瀏覽:714
win10選擇文件時自動全選 瀏覽:960
sync應用程序下載 瀏覽:512
韓國電影善良的嫂子誰主演的 瀏覽:343
長虹空調遙控什麼app 瀏覽:10
風雲cad文件咋樣打開 瀏覽:312
蘋果微信不鎖屏密碼 瀏覽:995
黃金名字的盜墓電影日本菲律賓 瀏覽:3
先機物聯刷新網路什麼意思 瀏覽:365
電影的過去式怎麼說 瀏覽:45
qq健身名片背景圖片 瀏覽:225
mac電腦如何更改id賬號和密碼錯誤 瀏覽:848
ps矩形工具怎麼自動填色 瀏覽:469
xls格式文件名 瀏覽:484
怎麼查找附近電影院的電影 瀏覽:408
:She Is A Lovely Start. 瀏覽:432
聯想k29開機測試工具 瀏覽:905
win10刪除照片磁貼 瀏覽:659

友情鏈接