1. 程式人生 > >在VB.NET下利用Socket實現簡單的字串傳送接收程式

在VB.NET下利用Socket實現簡單的字串傳送接收程式


我們使用多執行緒來實現
先匯入名稱空間:
Imports System.Net.sockets
Imports System.net
Imports System.Text
Imports System.Threading
定義兩個窗體變數
Dim s As Socket = Nothing
Dim t As Thread
新建一個過程,用於處理接收到的Socket資料包
Public Sub WaitData()
        s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) '''使用TCP協議
        Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)  '''指定IP和Port
        s.Bind(localEndPoint)        '''繫結到該Socket
        s.Listen(100)     '''偵聽,最多接受100個連線
        While (True)
            Dim bytes(1024) As Byte   '''用來儲存接收到的位元組
            Dim ss As Socket = s.Accept()  '''若接收到,則建立一個新的Socket與之連線
            ss.Receive(bytes)    '''接收資料,若用ss.send(Byte()),則傳送資料
            ListBox1.Items.Insert(0, Encoding.Unicode.GetString(bytes)) '''將其插入到列表框的第一項之前
            '''若使用Encoding.ASCII.GetString(bytes),則接收到的中文字元不能正常顯示
        End While
End Sub
在BtnStart的click事件中,加入如下程式碼:
 t = New Thread(AddressOf WaitData)  '''建立新的執行緒
        t.Start()     '''啟動執行緒
        BtnStart.Enabled = False   '''按鈕不可用,避免另啟執行緒
在BtnStop的click事件中,加入如下程式碼:
 Try
            s.Close()     '''關閉Socket
            t.Abort()     '''中止執行緒
        Catch
        Finally
            BtnStart.Enabled = True   '''啟用BtnStart
        End Try
為了防止使用者不點選Stop直接退出,而不能使執行緒結束,則應在窗體的closing事件中,加入如下程式碼:
 Try
            s.Close()
            t.Abort()
        Catch
        End Try