⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p2pfiletransmit.cs

📁 kuiMsg是一款用.net C# 开发的即时消息开源软件,适合.net即时消息软件开发者用。 主要功能: 支持文件传输(p2p); 支持GIF动画表情( 彻底消除闪屏 :) );
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using IMLibrary;
namespace LanMsg 
{
    public partial class p2pFileTransmit : UserControl
    {
        public p2pFileTransmit()
        {
            InitializeComponent();
        }

        #region 自定义变量区
 
        /// <summary>
        /// 上次传输文件数据的长度
        /// </summary>
        private int lastTransmitLen = 0;

        /// <summary>
        /// 上一次收到或发送数据的时间
        /// </summary>
        private DateTime lastTime = System.DateTime.Now;

        #endregion

        #region 设置传输文件参数
        /// <summary>
        /// 设置传输文件参数
        /// </summary>
        /// <param name="isSend">标识文件是发送还是接收</param>
        /// <param name="fileName">显示的文件名</param>
        /// <param name="fullfullFileName">要发放的文件名</param>
        /// <param name="FileLen">文件尺寸</param>
        /// <param name="ServerIP">对方IP地址</param>
        /// <param name="ServerPort">对方端口</param>
        /// <param name="fileExtension">文件扩展名</param>
        /// <param name="mtu">最大网络传输单元</param>
        /// <param name="Msg">告诉对方发送文件的端口,以便对方文件接收端口连接</param>
        public void SetParameter(bool IsSend, string FullfullFileName, string FileName, int FileLen, System.Net.IPAddress ServerIP, int ServerPort, string FileExtension,ushort mtu, byte[]  Msg)
        {
            ///设置文件传输参数
            this.p2pFileTransmit1.SetParameter(IsSend,FullfullFileName ,FileName,FileLen,ServerIP,ServerPort,FileExtension ,mtu,Msg);

            this.PBar1.PositionMax = FileLen;//进度条最大值为文件长度
            this.labProcess.Text = "(0/" + IMLibrary.FileOpt.GetSizeStr(FileLen) + ")";//设置文字进度
            this.labFileName.Text   = FileName;

            if (IsSend)
            {
                this.linkSaveAs.Visible = false;
                this.labOr.Visible = false;
                this.labelState.Text = "等待对方接收文件...";
            }
            else
            {
                this.labelState.Text = "对方在等待您接收文件";
            }

        }
        #endregion

        #region  文件传输事件
        /// <summary>
        /// 文件传输结束事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void fileTransmittedEventHandler(object sender, fileTransmitEvnetArgs e);//文件传输结束事件
        public event fileTransmittedEventHandler fileTransmitted;

        /// <summary>
        /// 取消文件传输事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void fileTransmitCancelEventHandler(object sender, fileTransmitEvnetArgs e);//取消文件传输事件
        public event fileTransmitCancelEventHandler fileTransmitCancel;

        /// <summary>
        /// 文件传输开始事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void fileTransmitBeforeEventHandler(object sender, fileTransmitEvnetArgs e);//接收文件传输事件
        public event fileTransmitBeforeEventHandler fileTransmitBefore;

        /// <summary>
        ///  文件传输超时事件 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void fileTransmitOutTimeEventHandler(object sender, fileTransmitEvnetArgs e);//接收文件发送超时
        public event fileTransmitOutTimeEventHandler fileTransmitOutTime;

        /// <summary>
        /// 文件传输错误事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void fileTransmitErrorEventHandler(object sender, fileTransmitEvnetArgs e);//文件发送错误 
        public event fileTransmitErrorEventHandler fileTransmitError;

        /// <summary>
        /// 事件:发送或收到文件数据
        /// </summary>
        /// <param name="sender">对像</param>
        /// <param name="e"></param>
        public delegate void fileTransmittingEventHandler(object sender, fileTransmitEvnetArgs e);//发送或收到文件数据 
        public event fileTransmittingEventHandler fileTransmitting;

         
        private void p2pFileTransmit1_fileTransmitBefore(object sender, fileTransmitEvnetArgs e)
        {
            if (e.isSend)
                this.labelState.Text = "文件正在发送中...";
            else
                this.labelState.Text = "文件正在接收中...";

            if (this.fileTransmitBefore != null)
                  this.fileTransmitBefore(this, e);
        }

        private void p2pFileTransmit1_fileTransmitCancel(object sender, fileTransmitEvnetArgs e)
        {
            if (this.fileTransmitCancel != null)
                this.fileTransmitCancel(this, e);
        }

        private void p2pFileTransmit1_fileTransmitError(object sender, fileTransmitEvnetArgs e)
        {
            if (this.fileTransmitError != null)
                this.fileTransmitError(this, e);
        }

        private void p2pFileTransmit1_fileTransmitOutTime(object sender, fileTransmitEvnetArgs e)
        {
            if (this.fileTransmitOutTime != null)
                this.fileTransmitOutTime(this, e);
        }

        private void p2pFileTransmit1_fileTransmitted(object sender, fileTransmitEvnetArgs e)
        {
            if (this.fileTransmitted != null)
                this.fileTransmitted(this,e);
        }

        private void p2pFileTransmit1_fileTransmitting(object sender, fileTransmitEvnetArgs e)
        {
            this.PBar1.Position = e.currTransmittedLen;//设置进度条显示进度
            this.PBar1.Refresh();

            if (IMLibrary.FileOpt.DateDiff(this.lastTime, System.DateTime.Now) > 1)//一秒钟计算一次传输速度
            {
                this.labProcess.Text ="剩余"+ IMLibrary.FileOpt.getResidualTime(this.p2pFileTransmit1.FileLen, e.currTransmittedLen, this.lastTransmitLen);//获得文件传输剩余时间
                this.labProcess.Text += "\n(" + IMLibrary.FileOpt.GetSizeStr(e.currTransmittedLen) + "/" + this.p2pFileTransmit1.FileLenStr + ")\nMTU=" + this.p2pFileTransmit1.MTU.ToString() + "字节";
                this.lastTime = System.DateTime.Now;
                this.lastTransmitLen = e.currTransmittedLen;
            }

            if (this.fileTransmitting != null)
                this.fileTransmitting(this, e);
        }
        #endregion

        #region 接收文件
        private void linkSaveAs_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Windows.Forms.SaveFileDialog fd = new SaveFileDialog();
                fd.Filter = "所有文件(*" + this.p2pFileTransmit1.Extension + ")|*" + this.p2pFileTransmit1.Extension;
                fd.FileName = this.labFileName.Text;

                if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    this.linkSaveAs.Visible = false;
                    this.labOr.Visible = false;
                    this.Refresh();
                    if (System.IO.File.Exists(fd.FileName))
                    {
                        System.IO.File.Delete(fd.FileName);
                        System.Threading.Thread.Sleep(2000);
                    }

                    this.lastTime = DateTime.Now;//设置最后一次传输文件的时间

                    this.p2pFileTransmit1.startIncept(fd.FileName);
                }
            }
            catch { }
        }
        #endregion

        private void linkLabelCancel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.p2pFileTransmit1.CancelTransmit();//取消文件传输
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -