C#UDP通信+文件传输

本文档介绍了一个C# UDP通信程序,用于文件传输。在尝试使用SaveFileDialog让用户选择保存文件的位置时遇到只能在单线程中使用的错误。作者展示了程序的主要部分,包括接收和发送数据的线程、广播和单播消息的发送方法,以及文件发送和接收的实现。在文件接收部分,作者尝试解决用户确认接收文件并指定保存路径的问题。
摘要由CSDN通过智能技术生成

整了好几天发现还是有点问题,发送文件的时候不能选择想要存放文件的地址,让我郁闷!如有高人希望指点!


红色字体处,设置文件保存位置,我想用

                    SaveFileDialog sfd = new SaveFileDialog();
                    //弹出文件保存选择框
                    if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {}

这段代码修改保存的地址,可是报了个错误,只能在单线程中使用。。。。没有改成功。。。


Form窗体中的程序:资源里有成品http://download.csdn.net/detail/small5e4444/3701539


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;


namespace BroadcastExample
{
    public partial class Form1 : Form
    {
        delegate void AppendStringCallback(string text);//创建委托 给窗体控件
        AppendStringCallback appendStringCallback;




        delegate void AppendStringCallback_combox(string text);//创建委托 给窗体控件
        AppendStringCallback_combox appendStringCallback_combox;


        //使用的接收端口号
        private int receivePort = 40000;
        private UdpClient receiveUDP;


        string selfIP = "";//自己的IP


        string[] allIp;//= new string[100];//所有IP
        string[] allName;//= new string[100];//所有用户名


        System.Net.IPAddress[] addressList;//获取本地IP


        Thread receiveThread;//收信 线程

        //-------------------------------------监听用
        private Thread ListenThread = null;
        private Thread GetFileThread = null;
        private string filepath = null;
        private TcpListener tcplistener = null;
        private TcpClient tcpclient = null;


        public Form1()
        {
            InitializeComponent();
            appendStringCallback = new AppendStringCallback(AppendString);


            appendStringCallback_combox = new AppendStringCallback_combox(AppendString_1);


        }


        private void Form1_Load(object sender, EventArgs e)
        {
            //---------------------------------------------------------开启 监听
            try
            {
                IPAddress[] ipaddresses = Dns.GetHostAddresses(Dns.GetHostName());
                tcplistener = new TcpListener(ipaddresses[0], 8888);
                tcplistener.Start();
            }
            catch (Exception E)
            {
                MessageBox.Show(E.Message);
                this.Dispose();
            }


            ListenThread = new Thread(new ThreadStart(Listen));
            ListenThread.Start();
            //---------------------------------------------------------




            receiveThread = new Thread(new ThreadStart(ReceiveData));//启动 收信息的线程
            //将线程设为后台运行
            receiveThread.IsBackground = true;
            receiveThread.Start();


            allIp = new string[100];//所有IP
            allName = new string[100];//所有用户名




            addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;//获取自己的IP
            selfIP = addressList[0].ToString();


            if (addressList.Length > 1)
            {
                //textBox1.Text = addressList[0].ToString();
                //textBox2.Text = addressList[1].ToString();
            }
            else
           

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值