利用socket完成VB.NET文件传输案例剖析
创始人
2024-06-09 21:51:35
0

提到文件传输不知道的人会问怎么传输啊?可是这个问题对于我们程序员来说就不是一个很陌生的话题,大家都知道socket.socket是网络套接字,使用它我们可以很方便的实现网络的数据传输。在.net中提供了socket类来帮助开发者调用socket的使用,从而避免了调用socket的动态库来实现socket的麻烦。下面我们就来看一个简单的例子,从这个简单的例子来看看.net中的socket类实现socket是多么的方便。

VB.NET文件传输编程思路:在这个简单的例子中我们将通过socket来实现文件的网络传输和接收功能。要实现这两个功能我们需要通过vs.net建立两个实例来完成。一个发送端,一个接收端。由于文中已经给出了详细的注释这里就不罗嗦了。

VB.NET文件传输代码:

  1. 发送端PublicClassForm1  
  2. InheritsSystem.Windows.Forms.Form  
  3. PrivateSubButton1_Click(ByValsenderAsSystem.Object,  
  4. ByValeAsSystem.EventArgs)HandlesButton1.Click  
  5. DimsendsocketAsNewNet.Sockets.Socket  
  6. (Net.Sockets.AddressFamily.InterNetwork,  
  7. Net.Sockets.SocketType.Stream,Net.Sockets.ProtocolType.Tcp)  
  8. ''实例化socket  
  9. DimipendpiontAsNewNet.IPEndPoint  
  10. (Net.IPAddress.Parse("192.168.0.1"),8888)''建立终结点  
  11. ''OpenFileDialog1.ShowDialog()  
  12. DimfsAsNewIO.FileStream("c:p.doc",  
  13. IO.FileMode.OpenOrCreate,IO.FileAccess.Read)''要传输的文件  
  14. Dimfssize(fs.Length-1)AsByte  
  15. DimstrreadAsNewIO.BinaryReader(fs)''流处理要传输的文件  
  16. ''fs.Read(fssize,0,fssize.Length-1)  
  17. strread.Read(fssize,0,fssize.Length-1)  
  18. sendsocket.Connect(ipendpiont)''连接远程计算机  
  19. sendsocket.Send(fssize)''发送文件  
  20. Label1.Text=fs.Length()  
  21. fs.Close()  
  22. sendsocket.Shutdown(Net.Sockets.SocketShutdown.Send)  
  23. ''关闭发送连接  
  24. sendsocket.Close()''关闭本机socket  
  25. EndSub  
  26. EndClass  
  27. 接收端PublicClassForm1  
  28. InheritsSystem.Windows.Forms.Form  
  29. DimreceivesocketAsNewNet.Sockets.Socket  
  30. (Net.Sockets.AddressFamily.InterNetwork,  
  31. Net.Sockets.SocketType.Stream,  
  32. Net.Sockets.ProtocolType.Tcp)  
  33. PrivateSubForm1_Load(ByValsenderAsSystem.Object,  
  34. ByValeAsSystem.EventArgs)HandlesMyBase.Load  
  35. DimhostipendpiontAsNewNet.IPEndPoint  
  36. (Net.IPAddress.Parse("192.168.0.1"),8888)  
  37. receivesocket.Bind(hostipendpiont)  
  38. ''建立远程计算机的的socket  
  39. receivesocket.Listen(2)''监听socket  
  40. EndSub  
  41.  
  42. PrivateSubButton1_Click(ByValsenderAsObject,  
  43. ByValeAsSystem.EventArgs)HandlesButton1.Click  
  44. DimrecfsAsNewIO.FileStream("p.doc",  
  45. IO.FileMode.OpenOrCreate)  
  46. ''接收数据并将其保存到一个新的文件中  
  47. Dimrecbyte(229888)AsByte  
  48. DimhostsocketAsNet.Sockets.Socket=  
  49. receivesocket.Accept()  
  50. ''同意和发送端计算机建立连接  
  51. DimnewfilestrAsNewIO.BinaryWriter(recfs)''流写  
  52. hostsocket.Receive(recbyte)  
  53. ''recfs.Write(recbyte,0,recbyte.Length-1)  
  54. newfilestr.Write(recbyte,0,recbyte.Length-1)  
  55. recfs.Close()  
  56. hostsocket.Shutdown(Net.Sockets.SocketShutdown.Receive)  
  57. hostsocket.Close()  
  58. EndSub  
  59. EndClass 

通过上面的简单语句我们就完成VB.NET文件传输,但是这里有一点要注意,此代码只可以接受文本文件和图片文件,对于其他文件的发送和接收将导致编码错误,如果你不相信你可以传输一个mp3文件,再在播放器中打开接收到的mp3文件,你会听到只有开头不到2秒的音乐可以播放。如果想解决这个问题你需要使用,net中的tcp/ip类或udp类来实现,当然调用底层的socket动态库也可以解决这个问题。

【编辑推荐】

  1. 实例讲述VB.NET使用Log4Net
  2. 三分钟学会VB.NET转换形态
  3. VB.NET获取硬盘信息四大法宝
  4. 讲述VB.NET调用Excel的好处
  5. 简单例子概述VB.NET新窗体

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...