System.Sockes命名空间了实现 Berkeley 套接字接口。通过这个类,我们可以实现网络计算机之间的消息传输和发送.而在我下面要讨论的这个议题里,我们将讨论的是用套节子实现文件的传输.这种方法有别于FTP协议实现的的文件传输方法,利用ftp的方法需要一个专门的服务器和客户端,无疑于我们要实现的点对点的文件传输太为复杂了一些。在这里,我们实现一个轻量级的方法来实现点对点的文件传输,这样就达到了intenet上任何两个计算机的文件共享。

在两台计算机传输文件之前,必需得先有一台计算机建立套节子连接并绑定一个固定得端口,并在这个端口侦听另外一台计算机的连接请求。

socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
socket.Blocking = true ;

IPEndPoint computernode1 = new IPEndPoint(serverIpadress, 8080);

socket.Bind(computernode1);

socket.Listen(-1);

当有其他的计算机发出连接请求的时候,被请求的计算机将对每一个连接请求分配一个线程,用于处理文件传输和其他服务。

while ( true )

{

clientsock = socket.Accept();

if ( clientsock.Connected )

{

Thread tc = new Thread(new ThreadStart(listenclient));

tc.Start();

}

}

下面的代码展示了listenclient方法是如何处理另外一台计算机发送过来的请求。首先并对发送过来的请求字符串作出判断,看看是何种请求,然后决定相应的处理方法。

void listenclient()
{
  Socket sock = clientsock ;
  try
  {
    while ( sock != null ) 
    {
      byte[] recs = new byte[32767];
      int rcount = sock.Receive(recs,recs.Length,0) ;
      string message = System.Text.Encoding.ASCII.GetString(recs) ;
     //对message作出处理,解析处请求字符和参数存储在cmdList 中
          execmd=cmdList[0];
      sender = null ;
      sender = new Byte[32767];
  
      string parm1 = "";
//目录列举     
if ( execmd == "LISTING" ) 
      {
        ListFiles(message);
        continue ;
      } 
//文件传输
      if ( execmd == "GETOK" )
      {
        cmd = "BEGINSEND "  + filepath + " " + filesize ;
        sender = new Byte[1024];
        sender = Encoding.ASCII.GetBytes(cmd);
        sock.Send(sender, sender.Length , 0 );
               //转到文件下载处理
        DownloadingFile(sock);
        continue ;
      }   
    }
  }
  catch(Exception Se)
  {
    string s = Se.Message;
    Console.WriteLine(s);
  }
}
至此,基本的工作已经完成了,下面我们看看如何处理文件传输的。
while(rdby < total && nfs.CanWrite)
  {
//从要传输的文件读取指定长度的数据
len =fin.Read(buffed,0,buffed.Length) ;
    //将读取的数据发送到对应的计算机
    nfs.Write(buffed, 0,len);
    //增加已经发送的长度
    rdby=rdby+len ;          
  }
从上面的代码可以看出是完成文件转换成FileStream 流,然后通过NetworkStream绑定对应的套节子,最后调用他的write方法发送到对应的计算机。
我们再看看接受端是如何接受传输过来的流,并且转换成文件的:
NetworkStream nfs = new NetworkStream(sock) ;
try
{
        //一直循环直到指定的文件长度
        while(rby < size)
  {
      byte[] buffer = new byte[1024] ;
      //读取发送过来的文件流
      int i = nfs.Read(buffer,0,buffer.Length) ;
      fout.Write(buffer,0,(int)i) ;
      rby=rby+i ;
    }  
  fout.Close() ;
从上面可以看出接受与发送恰好是互为相反的过程,非常简单。
至此,单方向的文件传输就完成了,只需要在每个对等的节点上同时实现上面的发送和接受的处理代码就可以做到互相传输文件了。


用Socket实现点对点的文件传输相关推荐

  1. 使用Socket实现点对点的文件传输

    System.Sockes命名空间了实现 Berkeley 套接字接口.通过这个类,我们可以实现网络计算机之间的消息传输和发送.而在我下面要讨论的这个议题里,我们将讨论的是用套接字实现文件的传输.这种 ...

  2. 点对点加密文件传输工具Filegogo

    什么是 Filegogo ? Filegogo 是一款基于 WebRTC 技术开发的,在浏览器中运行的点对点加密文件传输工具. 官方体验地址:https://send.22333.fun 之前老苏写过 ...

  3. java socket 点对点_javaSocket点对点实现文件传输

    伟哥是学C++的,昨天做java老师布置的大作业,让他们做一个文件传输的程序,多线程实现,伟哥很是无语啊,然而他并没有学过太多java,虽然伟哥在我心中是个大神(计算机大神啊,面过了tecent,啧啧 ...

  4. python实现文件传输_Python使用socket实现简单的文件传输并校验

    因为工作需要,要在两台设备之间进行压力测试.即A设备不断往B设备发送文件,B设备接收文件后校验文件是否正确接收. 用Python的socket模块写了简单的Server和Client脚本.Server ...

  5. windows环境下的socket编程(tcp文件传输的实现)

    开发环境 使用codeclock软件进行编程 新建项目选择console application完成相应的步骤即可.在项目下有main.c的文件只需要将代码写入其中即可. 代码设计 客户端 clien ...

  6. c 服务器传输大文件,cend.me:不须经过服务器,直接点对点的文件传输免费服务...

    要传送文件给远程的手机.平板.电脑等设备,通常的做法就是先将文件上传到服务器存放,然后再从服务器下载,这样的做法看似合理,但如果上传的同时就由远程的设备来接收,不要经过服务器,这样就能更节省上.下载的 ...

  7. 一个简单的点对点文件传输程序

    一个简单的点对点文件传输程序 黄定伍   402431143 在网络飞速发展的今天,信息的共享给我们带来了莫大的益处,而文件传输又是网络数据交换的主要形式,谈到文件传输大家可能会想到FTP文件传输协议 ...

  8. html大文件传输,socket大文件传输

    遇到了在c#中socket如何实现大文件传输 接收端 private void Receive(Socket socket) { NetworkStream ns = new NetworkStrea ...

  9. android c++服务器端,c++服务器与android客户端进行文件传输功能的实现

    c++服务器与android通过socket网络编程进行文件传输解决方案 项目最新成品:http://blog.csdn.net/nuptboyzhb/article/details/8611179 ...

最新文章

  1. Java设计模式之虚拟代理模式
  2. SQL-61 对于employees表中,给出奇数行的first_name
  3. 统计学习方法笔记(五)-线性可分支持向量机原理及python实现
  4. Hadoop中-put和-copyFromLocal的区别
  5. 通过JAVA对HDFS进行操作管理插件
  6. 充电桩系统php源码,源码 充电桩程序设计 - 下载 - 搜珍网
  7. 前端面试常考题:JS垃圾回收机制
  8. 欢迎来到德莱联盟(一)
  9. vscode下载太慢,修改下载地址提速
  10. 怎么改java的gre_GRE怎样完成60天小白到大神的蜕变?
  11. 如何删除ppt自带背景音乐_ppt模板里自带的背景乐怎么去掉?
  12. 82、组合分配式气体灭火系统所需的气体单向阀的数量
  13. 如何成为一流的「匠人」?
  14. GANs奇思妙想TOP10榜单
  15. 【Pytorch】Tensor.contiguous()使用与理解
  16. 小程序客服消息推送公众号文章 引导关注公众号的操作方法
  17. qduoj 生化危机
  18. 河北最新建筑施工架子工(建筑特种作业)机考题库及建筑架子工试题答案解析
  19. ED80/6电力液压推动器
  20. Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

热门文章

  1. 根域名服务器性能,根服务器和根域名服务器的区别
  2. forwardRef 的详解及使用
  3. C语言练习:该存多少钱
  4. 专线宽带和家庭宽带有什么区别呢?网络专线有哪些?
  5. 基于ALOHA MAC方法的蒙特卡罗模拟(Matlab代码实现)
  6. 为什么谷歌会从零开始构建一个全新的操作系统?
  7. Linux use apktool problem
  8. ORA-01034: ORACLE not available Process ID: 0 Session ID: 0 Serial number: 0
  9. 10053 事件详解
  10. 全球及中国可编程图形计算器行业研究及十四五规划分析报告