用.net中的socket實現文件傳輸 icknay [原作]

socket是網絡套接字,使用它我們可以很方便的實現網絡的數據傳輸。在.net中提供了socket類來幫助開

發者調用socket的使用,從而避免了調用socket的動態庫來實現socket的麻煩。下面我們就來看一個簡單的例子,從這個簡單的例子來看看.net中的socket類實現socket是多麼的方便。

  編程思路:在這個簡單的例子中我們將通過socket來實現文件的網絡傳輸和接收功能。要實現這兩個功能我們需要通過vs.net建立兩個實例來完成。一個發送端,一個接收端。由於文中已經給出了詳細的註釋這裏就不羅嗦了。


  發送端


Public Class Form1
??? Inherits System.Windows.Forms.Form
??? Private Sub Button1_Click(ByVal sender As System.Object,
???   ByVal e As System.EventArgs) Handles Button1.Click
??????? Dim sendsocket As New Net.Sockets.Socket
  (Net.Sockets.AddressFamily.InterNetwork,
  Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
  '實例化socket
??????? Dim ipendpiont As New Net.IPEndPoint
  (Net.IPAddress.Parse("192.168.0.1"), 8888)'建立終結點
??????? 'OpenFileDialog1.ShowDialog()
??????? Dim fs As New IO.FileStream("c:/p.doc",
  IO.FileMode.OpenOrCreate, IO.FileAccess.Read)'要傳輸的文件
??????? Dim fssize(fs.Length - 1) As Byte
??????? Dim strread As New IO.BinaryReader(fs)'流處理要傳輸的文件
??????? 'fs.Read(fssize, 0, fssize.Length - 1)
??????? strread.Read(fssize, 0, fssize.Length - 1)
??????? sendsocket.Connect(ipendpiont)'連接遠程計算機
??????? sendsocket.Send(fssize)'發送文件
??????? Label1.Text = fs.Length()
??????? fs.Close()
??????? sendsocket.Shutdown(Net.Sockets.SocketShutdown.Send)
  '關閉發送連接
??????? sendsocket.Close()'關閉本機socket
??? End Sub
End Class

  接收端

Public Class Form1
??? Inherits System.Windows.Forms.Form
??? Dim receivesocket As New Net.Sockets.Socket
???   (Net.Sockets.AddressFamily.InterNetwork,
???   Net.Sockets.SocketType.Stream,
???   Net.Sockets.ProtocolType.Tcp)
??? Private Sub Form1_Load(ByVal sender As System.Object,
???     ByVal e As System.EventArgs) Handles MyBase.Load
??????? Dim hostipendpiont As New Net.IPEndPoint
  (Net.IPAddress.Parse("192.168.0.1"), 8888)
??????? receivesocket.Bind(hostipendpiont)
  '建立遠程計算機的的socket
??????? receivesocket.Listen(2)'監聽socket
??? End Sub

??? Private Sub Button1_Click(ByVal sender As Object,
???   ByVal e As System.EventArgs) Handles Button1.Click
??????? Dim recfs As New IO.FileStream("p.doc",
  IO.FileMode.OpenOrCreate)
  '接收數據並將其保存到一個新的文件中
??????? Dim recbyte(229888) As Byte
??????? Dim hostsocket As Net.Sockets.Socket =
  receivesocket.Accept()
  '同意和發送端計算機建立連接
??????? Dim newfilestr As New IO.BinaryWriter(recfs)'流寫
??????? hostsocket.Receive(recbyte)
??????? 'recfs.Write(recbyte, 0, recbyte.Length - 1)
??????? newfilestr.Write(recbyte, 0, recbyte.Length - 1)
??????? recfs.Close()
??????? hostsocket.Shutdown(Net.Sockets.SocketShutdown.Receive)
??????? hostsocket.Close()
??? End Sub
End Class

  通過上面的簡單語句我們就完成網絡文件的發送和接收,但是這裏有一點要注意,此代碼只可以接受文本文件和圖片文件,對於其他文件的發送和接收將導致編碼錯誤,如果你不相信你可以傳輸一個mp3文件,再在播放器中打開接收到的mp3文件,你會聽到只有開頭不到2秒的音樂可以播放。如果想解決這個問題你需要使用,net中的tcp/ip類或udp類來實現,當然調用底層的socket動態庫也可以解決這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章