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

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

vb.net關閉套接字 vbs關閉窗口代碼

關于VB Winsock控件的錯誤問題

10014產(chǎn)生的原因,請檢查Winsock的各個屬性設置。10054錯誤一般是遠程連接出現(xiàn)問題被重置,可能要從監(jiān)聽端口那一方去查原因。

專注于為中小企業(yè)提供成都網(wǎng)站建設、成都做網(wǎng)站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)東明免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

sckOutOfMemory 7 內(nèi)存不足

sckInvalidPropertyValue 380 屬性值不效

sckGetNotSupported 394 屬性不可讀

sckGetNotSupported 383 屬性是只讀的

sckBadState 40006 所請求的事務或請求本身的錯誤協(xié)議或者錯誤連接狀態(tài)

sckInvalidArg 40014 傳遞給函數(shù)的參數(shù)格式不確定,或者不在指定范圍內(nèi)

sckSuclearcase ccess 40017 成功

sckUnsupported 40018 不支持的變量類型

sckInvalidOp 40020 在當前狀態(tài)下的無效操作

sckOutOfRange 40021 參數(shù)越界

sckWrongProtocol 40026 所請求的事務或請求本身的錯誤協(xié)議

sckOpCanceled 10004 取消操作

sckInvalidArgument 10014 所請求的地址是廣播地址,但未設置標記

sckWouldBlock 10035 套接字不成塊,而指定操作將使之成塊

sckInProgress 10036 制造塊的Winsock操作在進行之中

sckAlreadyComplete 10037 完成操作。未進行制作塊的操作

sckNotSocket 10038 描述符不是套接字

sckMsgTooBig 10040 數(shù)據(jù)太大,不適于緩沖區(qū)的要求,因而被截斷

sckPortNotSupported 10043 不支持指定的端口

sckAddressInUse 10048 地址在使用中

sckAddressNotAvailable 10049 來自本地機器的不可用地址

sckNetworkSubsystemFailed 10050 網(wǎng)絡子系統(tǒng)失敗

sckNetworkUnreachable 10051 當前不能從主機到達網(wǎng)絡

sckNetReset 10052 在設置SO_KEEPALIVE時連接超時

sckConnectAborted 10053 由于超時或者其它失敗而中止接連

sckConnectionReset 10054 通過遠端重新設置連接

sckNoBufferSpace 10055 沒有可用的緩存空間

sckAlreadyConnected 10056 已連接的套接字

sckNotConnected 10057 未接連套接字

sckSockedShutdown 10058 已關閉套接字

sckTimedout 10060 套接字超時

sckConnectionRefused 10061 強行拒絕連接

sckNotInitialized 10093 套接字沒有初始化

sckHostNotFound 11001 授權應答:未找到主機

sckHostNotFoundTryAgain 11002 非授權應答:未找到主機,重試

sckNonRecoverableError 11003 不可恢復的錯誤

sckNoData 11004 無效名,對所請求的類型無數(shù)據(jù)記錄

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

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

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

一.簡介本文在實現(xiàn)TCP協(xié)議網(wǎng)絡應用時使用的類庫:

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

1. NetworkStream類:

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

Dim tcpClient As TcpClient

Dim nsStream As NetworkStream

tcpClient = New TcpClient( "" , 8000)

''對遠程主機的8000端口提出TCP連接申請

nsStream = tcpClient.GetStream ( )

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

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

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

表01:NetworkStream類中常用的方法及其說明

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

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

表02:NetworkStream類中屬性及其說明

2. StreamReader類:

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

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

表03:NetworkStream類中常用的方法及其說明

3. StreamWriter類:

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

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

表04:StreamWriter類的常用方法及其說明

4.TcpClient 類:

TcpClient 類主要為TCP網(wǎng)絡服務提供客戶端連接。TcpClient是類基于Socket類構(gòu)建,

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

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

表05:TcpClient類常用的方法

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

表06:TcpClient類常用的屬性

5.TcpListener 類:

TcpListener類的主要作用是從TCP網(wǎng)絡客戶端偵聽連接,TcpListener類基于Socket 類

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

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

屬性 說明 LocalEndpoint 獲取當前TcpListener的基礎EndPoint Active 獲取一個值,該值指示 TcpListener 是否正主動偵聽客戶端連接 Server 獲取基礎網(wǎng)絡Socket

表8:TcpListener 類常用的屬性

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

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

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

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

1. 啟動Visual Studio .Net。

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

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

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

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

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

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

一個Label組件。

一個StatusBar組件。

一個ListBox組件。

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

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

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

 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中創(chuàng)建各種可視組件的代碼中添加下列代碼,下列代碼的作用是創(chuàng)建全局使用的實例和變量:

Private iPort As Integer = 8000

''定義偵聽端口號

Private thThreadRead As Thread

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

Private tlTcpListen As TcpListener

''偵聽端口號

Private blistener As Boolean = True

''設定標示位,判斷偵聽狀態(tài)

Private nsStream As NetworkStream

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

Private srRead As StreamReader

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

Private tcClient As TcpClient

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

Private Sub Listen ( )

Try

 tlTcpListen = New TcpListener ( iPort )

 ''以8000端口號來初始化TcpListener實例

 tlTcpListen.Start ( )

 ''開始監(jiān)聽

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

 tcClient = tlTcpListen.AcceptTcpClient ( )

 ''通過TCP連接請求

 nsStream = tcClient.GetStream ( )

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

 srRead = New StreamReader ( nsStream )

 ''以得到的網(wǎng)絡基礎數(shù)據(jù)流來初始化StreamReader實例

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

 ''循環(huán)偵聽

 While blistener

Dim sMessage As String = srRead.ReadLine ( )

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

If ( sMessage = "STOP" ) Then

 tlTcpListen.Stop ( )

 ''關閉偵聽

 nsStream.Close ( )

 srRead.Close ( )

 ''釋放資源

 StatusBar1.Text = "無連接!"

 thThreadRead.Abort ( )

 ''中止線程

 Return

Else

 ''判斷是否為斷開TCP連接控制碼

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

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

 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連接的遠程主機發(fā)送來的文本數(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過程來初始化線程實例

 thThreadRead.Start ( )

 ''啟動線程

 Button1.Enabled = False

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

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

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

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

1. 啟動Visual Studio .Net。

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

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

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

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

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

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

二個Label組件。

二個TextBox組件。

一個StatusBar組件。

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

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

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

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

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

VB.NET里如何關閉ADODC控件連接

在關閉窗口前或者使用完數(shù)據(jù)庫操作后執(zhí)行下OleDbConnection的Close方法就行了.

vb2010 (vb.net )Socket套接字當網(wǎng)絡中斷時或服務器意外關機,客戶端如何自動重新連接服務端

發(fā)送接收的過程都放在Try...Catch里面,一旦連接中斷,就會出錯,此時可以關閉現(xiàn)有連接,重新連服務端


新聞標題:vb.net關閉套接字 vbs關閉窗口代碼
標題來源:http://weahome.cn/article/doseidd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部