c# 文件传送

传送窗体主要代码

//引用代码

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;

//按钮事件代码

//取得预发送的文件名
    string SendFileName=textBox5.Text.Trim();
    //远程主机
    string RemoteHostName=textBox1.Text.Trim();
    //远程端口
    int RemotePort=Int32.Parse(textBox2.Text.Trim());
    //得到主机信息
    IPHostEntry ipInfo=Dns.GetHostByName(RemoteHostName);
    //取得IPAddress[]
    IPAddress[] ipAddr=ipInfo.AddressList;
    //得到远程接收IP
    IPAddress ip=ipAddr[0];
    //组合出远程终结点
    IPEndPoint hostEP=new IPEndPoint(ip,RemotePort);
    //创建Socket 实例
    Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    try
    {
     //尝试连接
     socket.Connect(hostEP);
    }
    catch(Exception se)
    {
     MessageBox.Show("连接远程IP错误"+se.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
    }
   
    //发送文件流代码   
   
   
    NetworkStream tcpStream = new NetworkStream(socket) ;

    FileStream    fs    =    new    FileStream(SendFileName,    FileMode.Open,    FileAccess.Read);     
    BinaryReader    fileReader    =    new    BinaryReader(fs,Encoding.Default);   
    long Total=fs.Length;

    byte[]    bytes    =    new    byte[Total];     
    int    hasRead=0;  
    int len;
    //获取要传输文件的总长度
    //读取文件写入到数据流中
    while((hasRead<=fs.Length)&&tcpStream.CanWrite&&fileReader.Read(bytes,0,bytes.Length)!=0)     
    //while((hasRead   =   fileReader.Read(bytes,0,bytes.Length)) !=   0)   
    {     
     //从要传输的文件读取指定长度的数据
     len =fileReader.Read(bytes,0,bytes.Length) ;
     //将读取的数据发送到对应的计算机
     tcpStream.Write(bytes,0,hasRead);
     try
     {
      //向主机发送请求
      socket.Send(bytes,bytes.Length,0);
      this.statusBar1.Text+=" "+hasRead;
    
     }
     catch(Exception ce)
     {
      MessageBox.Show("发送错误:"+ce.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
     }
     //增加已经发送的长度
     hasRead+=len ;
  
    }   
    fileReader.Close();
    fs.Close();
   
    //禁用Socket
    socket.Shutdown(SocketShutdown.Both);
    //关闭Socket
    socket.Close();
    this.statusBar1.Text+="文件成功发送!";

接收窗体主要代码

//引用代码

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Text;

//按钮事件代码

/// <summary>
   /// 必需的设计器变量。
   /// </summary>
   ///

   private Thread thThreadRead ;
   //创建线程,用以侦听端口号,接收信息
   private TcpListener tlTcpListen ;
   //侦听端口号
   private bool blistener = true ;
   //设定标示位,判断侦听状态
   private Socket stRead ;
   private System.Windows.Forms.Button button4;

private void button1_Click(object sender, System.EventArgs e)
   {
   

    thThreadRead = new Thread ( new ThreadStart( Listen ) ) ;
    //以Listen过程来初始化Thread实例
    thThreadRead.Start (    ) ;
    //启动线程
    button1.Enabled = false   ;

   }


   private void Listen()
   {
    try
    {
     IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());    
     IPAddress LocalIP = ieh.AddressList[0];
     int LocalPort=Int32.Parse(textBox4.Text);
     this.textBox3.Text=LocalIP.ToString();

     string ReceiveFileName=textBox6.Text.Trim();
     tlTcpListen = new TcpListener( LocalIP, LocalPort );
     //以8000端口号来初始化TcpListener实例
     tlTcpListen.Start ( )   ;
     //开始监听网络的连接请求
     statusBar1.Text = "程序正在监听..."   ;
     stRead =   tlTcpListen.AcceptSocket() ;
     //通过连接请求,并获得接收数据时使用的Socket实例
     EndPoint tempRemoteEP =   stRead.RemoteEndPoint   ;
     IPEndPoint tempRemoteIP =   ( IPEndPoint ) tempRemoteEP ;
     //获取请求的远程计算机名称
     IPHostEntry host = Dns.GetHostByAddress ( tempRemoteIP.Address ) ;
     string sHostName = host.HostName ;
     statusBar1.Text = "远程电脑: "+ sHostName + " 已经与本机通过端口 " +LocalPort.ToString()+" 成功建立连接!" ;
    

     //同意和发送端计算机建立连接
    
     string ReceiveContent="";
     string sTime = DateTime.Now.ToShortTimeString   ( )   ;
     int iRead;
     //循环侦听
     while (blistener)
     {
     
      //获取接收数据时的时间
      Byte [ ] byRead =new Byte [229888] ;
      iRead =   stRead.ReceiveFrom ( byRead , ref tempRemoteEP ) ;
     
     
      //读取完成后退出循环
      if(iRead<=0)
      {
       this.button1.Enabled = true   ;
       //保存数据流为本地文件
       byte[] content=Encoding.Default.GetBytes(ReceiveContent);
       try
       {
        //创建文件流对象实例
        FileStream fs=new FileStream(ReceiveFileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
        //写入文件
        fs.Write(content,0,content.Length);
        fs.Close();
       }
       catch(Exception fe)
       {
        MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
       }

       //richTextBox1.Text ="\n\r接收时间 "+ sTime + "\n\r接收文件内容 " +ReceiveContent ;
       richTextBox1.Text =ReceiveContent ;
       stRead.Close ( ) ;
       tlTcpListen.Stop   (   )   ;
       //关闭侦听
       statusBar1.Text = "连接已经关闭!"   ;
       thThreadRead.Abort()   ;
      
       //中止线程
       break ;      
      }
      else
      {            
       //将读取的字节数转换为字符串
       //ReceiveContent+="\n\r本次"+iRead+"字节 "+Encoding.Default.GetString(byRead);
       ReceiveContent+=Encoding.Default.GetString(byRead);
       //ReceiveContent+=stRead.re"\n\r本次"+iRead+"字节 "+Encoding.Default.GetString(byRead);
      }
  
     }
    }
    catch   (   System.Security.SecurityException   )
    {
     MessageBox.Show   (   "侦听失败!"   , "错误"   )   ;
     this.button1.Enabled=true;
    }
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值