Net中的socket編程—聊天程式

來源:互聯網
上載者:User
socket是通訊端的英文名稱,主要是用於網路編程,在以前vb6時要想使用socket進行程式開發最麻煩的是要自己聲明socket動態庫中的相關函數,而這些函數的參數多不說,還是用c語言編寫的,要讓它門在vb中運行最頭痛的就是要進行函數參數的轉換。經常是為了測試一個參數的轉換是否正確而花上大半天的功夫。

  不過現在不同了有了.net,它的System.Net.Sockets 命名空間包含 Windows 通訊端介面的託管實現。而System.Net 命名空間中的所有其他網路訪問類都建立在該通訊端實現之上,有就是說使用System.Net.Sockets和System.Net 命名空間中類可以完成通過socket動態庫中的幾乎全部功能,但是又避免了參數轉化的麻煩。(.NET Framework的 Socket 類是 Winsock32 API 提供的通訊端服務的Managed 程式碼版本。大多數情況下,Socket 類方法只是將資料封送到它們的本機 Win32 副本中並處理任何必要的安全檢查。)

  Socket 類支援兩種基本模式:同步和非同步。在同步模式中,對執行網路操作的函數(如 Send 和 Receive)的調用一直等到操作完成後才將控制返回給調用程式。在非同步模式中,這些調用立即返回。本文將討論同步模式,因為同步模式是基礎。

  程式說明:(本文中的程-序需要使用者編寫兩個執行個體才可以完成。)

  發送方:在使用通訊端通訊之前,必須使用協議和網路地址資訊初始化通訊端。Socket 類的建構函式具有指定通訊端用來建立串連的地址族、通訊端類型和協議類型的參數。然後指定要發送到目標機器的ip地址和連接埠號碼。在將要發送資料發送的位元組數組傳遞到 Socket 類的資料發送方法Send 和 SendTo之一本文使用send方法。最後關閉socket終止發送。


'發送端代碼Public Class Form1    Inherits System.Windows.Forms.FormPrivate Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) Handles Button1.Click        Dim bytes(1024) As Byte'聲明位元組數組        Dim sender1 As New System.Net.Sockets.Socket        (Net.Sockets.AddressFamily.InterNetwork,        Net.Sockets.SocketType.Stream,        Net.Sockets.ProtocolType.Tcp)        '初始化socket        Dim msg As Byte() =        System.Text.Encoding.ASCII.GetBytes(TextBox1.Text)          '對發送的資料進行編碼'***************************'指定ip和連接埠        Dim ipHostInfo As System.Net.IPHostEntry =        System.Net.Dns.Resolve("d")        Dim ipAddress As System.Net.IPAddress =        ipHostInfo.AddressList(0)        Dim ipe As New System.Net.IPEndPoint(ipAddress, 11000)'**********************        sender1.Connect(ipe)'建立串連        Dim bytesSent As Integer = sender1.Send(msg)'發送資料'((((((((('關閉socket        sender1.Shutdown(Net.Sockets.SocketShutdown.Both)        sender1.Close()')))))))End SubEnd Class

  接收端:和發送端一樣先需要初始化通訊端,指定接收方ip和連接埠號碼(匭胗敕⑺頭較嗤ü齃isten方法監聽指定的接收方ip和連接埠號碼,申請串連,使用Receive接收資料,在將資料傳給位元組數組,最後關閉socket。


接收端Public Class Form1    Inherits System.Windows.Forms.Form    Dim listener As New System.Net.Sockets.Socket      (Net.Sockets.AddressFamily.InterNetwork,      Net.Sockets.SocketType.Stream,      Net.Sockets.ProtocolType.Tcp)      '初始socketPrivate Sub Form1_Load(ByVal sender As System.Object,  ByVal e As System.EventArgs) Handles MyBase.Load'指定ip和連接埠        Dim ipHostInfo As System.Net.IPHostEntry =        System.Net.Dns.Resolve(System.Net.Dns.GetHostName())        Dim ipAddress As System.Net.IPAddress =        ipHostInfo.AddressList(0)        Dim localEndPoint As New System.Net.IPEndPoint(ipAddress, 11000)        listener.Bind(localEndPoint)        listener.Listen(10)    End Sub    Private Sub Button1_Click(ByVal sender As System.Object,        ByVal e As System.EventArgs) Handles Button1.Click        Dim bytes() As Byte = New [Byte](1024) {}        Dim handler As System.Net.Sockets.Socket =        listener.Accept()'建立串連請求        Dim data As String = Nothing        bytes = New Byte(1024) {}        Dim bytesRec As Integer = handler.Receive(bytes)'接收資料        data += System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec)        TextBox1.Text = data        Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)        handler.Shutdown(Net.Sockets.SocketShutdown.Both)        handler.Close()    End SubEnd Class

  說明:本程式未進行異常處理,所以不可以連續點"接收"鍵,其原因是讓讀者快速掌握.net中的socket編程基礎(如要進行異常處理,請加入try塊,詳情見msdn)。由於本代碼的中資料編碼使用的是英文編碼,所以不支援中文字型(通過對編碼的修改可以發送中文,見msdn)。本文的目的不是教各位編寫聊天程式,所以在看本文時請從socket方面進行思考。本程式在區域網路和internet中測試時都通過了,如果是想在internet中使用本程式,需要將文中的接收和發送方的Dim ipe As New System.Net.IPEndPoint(ipAddress, 11000)語句中的ipaddress修改為真的ip地址並分別將發送和接收安裝於不同ip地址的電腦上。

  本程式開發環境vb.net,os是windows 2000。不過在微軟最新的vs.net2003中也可以編寫和編譯本程式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.