📄 p2pfiletransmit.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 + -