热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用.net中的socket实现文件传输

socket是网络套接字,使用它我们可以很方便的实现网络的数据传输。在.net中提供了socket类来帮助开发者调用socket的使用,从而避免了调用socket的动态库来实现socket的麻烦。下面
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动态库也可以解决这个问题。 
 
推荐阅读
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 本文介绍了一种利用Dom4j库和JFileChooser组件在Java中实现XML文件自定义路径导出的方法。通过创建一个Document对象并设置根元素,结合JFileChooser选择目标路径,实现了灵活的XML文件导出功能。具体步骤包括初始化Document对象、构建XML结构以及使用JFileChooser选择保存路径,确保用户能够方便地将生成的XML文件保存到指定位置。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文深入探讨了MDK链接脚本的应用与优化技巧。首先,文章介绍了链接脚本的基本概念及其在嵌入式系统开发中的重要性。接着,通过具体实例详细分析了链接脚本的结构和功能,特别是在程序在FLASH中运行时,如何优化链接脚本以提高系统性能。此外,文章还讨论了无需将程序加载到SRAM中的技术细节,为开发者提供了实用的参考和指导。 ... [详细]
  • 在深入探讨进程间通信技术时,本文重点解析了描述符传递的方法。通过详细分析发送和接收描述符的过程,文章首先介绍了发送描述符的具体步骤,并提供了相关函数原型。此外,还讨论了如何高效地在不同进程之间传输文件描述符,以实现资源的共享和同步。这一技术在多进程应用中具有重要意义,能够显著提升系统的性能和可靠性。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在C#中,通过重载子窗体Form2的构造函数,可以实现从父窗体向子窗体传递值的功能。具体实现方法是在Form2中定义一个带有字符串参数的构造函数,该构造函数接收父窗体传递的值并进行初始化。然而,目前子窗体向父窗体返回值的功能尚未实现,需要进一步开发和完善。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • Android开发常见问题汇总(含Gradle解决方案)第二篇
    本文继续深入探讨Android开发中常见的问题及其解决方案,特别聚焦于Gradle相关的挑战。通过详细分析和实例演示,帮助开发者高效解决构建过程中的各种难题,提升开发效率和项目稳定性。 ... [详细]
author-avatar
苦咖啡青柠檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有