现在的位置: 首页 > 综合 > 正文

c#传送文件代码(文本文件)

2013年10月04日 ⁄ 综合 ⁄ 共 4937字 ⁄ 字号 评论关闭

传送窗体主要代码

//引用代码

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;
   }
  }

 

抱歉!评论已关闭.