在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#网络编程 → c# udp文件传输 示例源码

c# udp文件传输 示例源码

C#网络编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.38M
  • 下载次数:168
  • 浏览次数:1251
  • 发布时间:2017-07-19
  • 实例类别:C#网络编程
  • 发 布 人:wh984925605
  • 文件格式:.zip
  • 所需积分:2
 相关标签: C# 文件 文件传输 发送 UDP

实例介绍

【实例简介】c# udp文件传输,发送、接收文件

【实例截图】



【核心代码】c# udp文件传输



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CSharpWin;
using System.Diagnostics;

namespace ReceiveFileDemo
{
    public partial class Form1 : Form
    {
        #region Fields

        private UdpReceiveFile udpReceiveFile;

        #endregion

        #region Constructor

        public Form1()
        {
            InitializeComponent();
            //linkLabel1.Click  = delegate(object sender, EventArgs e)
            //{
            //   Process.Start("www.csharpwin.com");
            //};
        }

        #endregion

        #region udpReceiveFile Events

        private void FileReceiveCancel(
            object sender, FileReceiveEventArgs e)
        {
            string name = string.Empty;
            if (e.Tag != null)
            {
                foreach (TraFransfersFileControl control1 in panelSend.Controls)
                {
                    RequestSendFileEventArgs rse = 
                        control1.Tag as RequestSendFileEventArgs;
                    if (rse != null && rse.TraFransfersFileStart.MD5 == e.Tag.ToString())
                    {
                        name = rse.TraFransfersFileStart.FileName;
                        BeginInvoke(new MethodInvoker(delegate()
                        {
                            panelSend.Controls.Remove(control1);
                            control1.Dispose();
                        }));
                        break;
                    }
                }
            }
            else
            {
                TraFransfersFileControl control =
                    e.ReceiveFileManager.Tag as TraFransfersFileControl;
                name = e.ReceiveFileManager.Name;
                if (control != null)
                {
                    BeginInvoke(new MethodInvoker(delegate()
                    {
                        panelSend.Controls.Remove(control);
                        control.Dispose();
                    }));
                }
                else
                {
                    foreach (TraFransfersFileControl control1 in panelSend.Controls)
                    {
                        ControlTag tag = control1.Tag as ControlTag;
                        if (tag != null && tag.MD5 == e.ReceiveFileManager.MD5)
                        {
                            BeginInvoke(new MethodInvoker(delegate()
                            {
                                panelSend.Controls.Remove(control1);
                                control1.Dispose();
                            }));
                            break;
                        }
                    }
                }
            }
            AppendLog(string.Format(
                "对方取消发送文件文件 {0} 。",
                name), true);
        }

        private void FileReceiveComplete(
            object sender, FileReceiveEventArgs e)
        {
            TraFransfersFileControl control =
                e.ReceiveFileManager.Tag as TraFransfersFileControl;
            if (control != null)
            {
                BeginInvoke(new MethodInvoker(delegate()
                {
                    panelSend.Controls.Remove(control);
                    control.Dispose();
                }));
            }
            else
            {
                foreach (TraFransfersFileControl control1 in panelSend.Controls)
                {
                    ControlTag tag = control1.Tag as ControlTag;
                    if (tag != null && tag.MD5 == e.ReceiveFileManager.MD5)
                    {
                        BeginInvoke(new MethodInvoker(delegate()
                        {
                            panelSend.Controls.Remove(control1);
                            control1.Dispose();
                        }));
                        break;
                    }
                }
            }
            AppendLog(string.Format(
                "文件 {0} 接收完成,MD5 校验: {1}。",
                e.ReceiveFileManager.Name, e.ReceiveFileManager.Success), true);
        }

        private void FileReceiveBuffer(
            object sender, FileReceiveBufferEventArgs e)
        {
            TraFransfersFileControl control =
                e.ReceiveFileManager.Tag as TraFransfersFileControl;
            if (control != null)
            {
                BeginInvoke(new MethodInvoker(delegate()
                {
                    control.TraFransfersSize  = e.Size;
                }));
            }
            else
            {
                foreach (TraFransfersFileControl control1 in panelSend.Controls)
                {
                    ControlTag tag = control1.Tag as ControlTag;
                    if (tag != null && tag.MD5 == e.ReceiveFileManager.MD5)
                    {
                        e.ReceiveFileManager.Tag = control1;
                        BeginInvoke(new MethodInvoker(delegate()
                        {
                            control1.TraFransfersSize  = e.Size;
                        }));
                        break;
                    }
                }
            }
        }

        private void RequestSendFile(
            object sender, RequestSendFileEventArgs e)
        {
            TraFransfersFileStart traFransfersFileStart = e.TraFransfersFileStart;
            TraFransfersFileControl control = new TraFransfersFileControl();
            control.IsSend = false;
            control.FileName = traFransfersFileStart.FileName;
            control.FileSize = traFransfersFileStart.Length;
            control.Image = traFransfersFileStart.Image;
            control.Comment = "接收文件";
            control.Tag = e;
            control.Dock = DockStyle.Top;
            control.LabelClick  = new LabelClickEventHandler(control_LabelClick);
            Invoke(new MethodInvoker(delegate()
            {
                panelSend.Controls.Add(control);
                control.BringToFront();
            }));

            AppendLog(string.Format(
                "请求发送文件 {0}。",
                traFransfersFileStart.FileName), true);
        }

        #endregion

        #region Control Events

        private void button1_Click(object sender, EventArgs e)
        {
            udpReceiveFile = new UdpReceiveFile(
                int.Parse(tbLocalPort.Text));
            udpReceiveFile.RequestSendFile  =
                new RequestSendFileEventHandler(RequestSendFile);
            udpReceiveFile.FileReceiveBuffer  =
                new FileReceiveBufferEventHandler(FileReceiveBuffer);
            udpReceiveFile.FileReceiveComplete  =
                new FileReceiveEventHandler(FileReceiveComplete);
            udpReceiveFile.FileReceiveCancel  =
                new FileReceiveEventHandler(FileReceiveCancel);
            udpReceiveFile.Start();
            AppendLog(string.Format(
                "开始侦听,端口:{0}", udpReceiveFile.Port), false);
        }

        private void control_LabelClick(
            object sender, LabelClickEventArgs e)
        {
            TraFransfersFileControl control = sender as TraFransfersFileControl;
            RequestSendFileEventArgs rse = null;
            bool receive = false;
            switch (e.Flag)
            {
                case 0:
                    rse = control.Tag as RequestSendFileEventArgs;
                    rse.Cancel = true;
                    panelSend.Controls.Remove(control);
                    control.Dispose();
                    AppendLog(string.Format(
                        "拒绝接收文件 {0}。",
                        rse.TraFransfersFileStart.FileName), false);
                    receive = true;
                    break;
                case 1:
                    rse = control.Tag as RequestSendFileEventArgs;
                    FolderBrowserDialog fbd = new FolderBrowserDialog();
                    if (fbd.ShowDialog() == DialogResult.OK)
                    {
                        rse.Path = fbd.SelectedPath;
                        control.StartTime = DateTime.Now;
                        AppendLog(string.Format(
                            "同意接收文件 {0}。",
                            rse.TraFransfersFileStart.FileName), false);
                        receive = true;
                    }
                    break;
                case 2:
                    rse = control.Tag as RequestSendFileEventArgs;
                    control.StartTime = DateTime.Now;
                    rse.Path = Application.StartupPath;
                    AppendLog(string.Format(
                        "同意接收文件 {0}。",
                        rse.TraFransfersFileStart.FileName), false);
                    receive = true;
                    break;
                case 3:
                    ControlTag tag = control.Tag as ControlTag;
                    udpReceiveFile.CancelReceive(tag.MD5, tag.RemoteIP);
                    panelSend.Controls.Remove(control);
                    control.Dispose();
                    AppendLog(string.Format(
                       "取消接收文件 {0}。",
                       tag.FileName), false);
                    break;
            }
            if (receive)
            {
                ControlTag tag = new ControlTag(
                    rse.TraFransfersFileStart.MD5,
                    rse.TraFransfersFileStart.FileName,
                    rse.RemoteIP);
                control.Tag = tag;
                control.IsSend = true;
                control.SetTag(3);
                udpReceiveFile.AcceptReceive(rse);
            }
        }

        #endregion

        #region Help Methods

        private void AppendLog(string text, bool async)
        {
            if (async)
            {
                BeginInvoke(new MethodInvoker(delegate()
                {
                    int index = listBox1.Items.Add(text);
                    listBox1.SelectedIndex = index;
                }));
            }
            else
            {
                int index = listBox1.Items.Add(text);
                listBox1.SelectedIndex = index;
            }
        }

        #endregion

        #region Override Methods

        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);
            if (udpReceiveFile != null)
            {
                udpReceiveFile.Dispose();
            }
        }

        #endregion
    }
}


网友评论

第 1 楼 星火燎原 发表于: 2018-11-17 11:29 42
请问你这个压缩包怎么打开,上传一个有损的压缩包,能用吗?浪费积分

mighty 2018-03-16 10:03 27

此实例已修复,重新下载后即可获取 可用源码

支持(0) 盖楼(回复)

第 2 楼 星火燎原 发表于: 2018-11-17 11:29 50
这个压缩包是打不开的,不要下载,浪费积分的

永远的唯一 2018-11-16 14:03 29

此实例已修复,重新下载后即可获取 可用源码

支持(0) 盖楼(回复)

第 3 楼 liusensss 发表于: 2021-09-02 11:48 58
操,不能用

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有5条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警