在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 基于TCP的消息和文件传输

基于TCP的消息和文件传输

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.20M
  • 下载次数:87
  • 浏览次数:590
  • 发布时间:2017-11-15
  • 实例类别:C#语言基础
  • 发 布 人:高相峰
  • 文件格式:.rar
  • 所需积分:2
 相关标签: tcp 文件 文件传输 c 消息

实例介绍

【实例简介】分为客户端和服务器两个部分,对获得的数据有装包和拆包操作

【实例截图】

from clipboard【核心代码】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using CommonData;
using System.Xml;
using System.Collections.ObjectModel;
using NetWorkSocket;

namespace ChatClient
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public static string _serverip ;
        public string _serverport;
        public string _currentuser;
        public MainWindowViewModel mvvm;
        Client _client ;

        public MainWindow()
        {
            InitializeComponent();

            mvvm = new MainWindowViewModel(this);
            this.DataContext = mvvm;

            //加载配置信息
            mvvm.UserInfoList = new ObservableCollection<UserInfo>();
            mvvm.FilePathList = new ObservableCollection<string>();
            LoadConfiger();

            _client = new Client(_serverip, _serverport);
            _client.BeginListen();

            _client.SendMessage("登录服务器", PackageType.PT_LOGIN, _currentuser, "服务器");
        }

        //加载配置文件
        public void LoadConfiger()
        {
            var path = AppDomain.CurrentDomain.BaseDirectory   "ConfigersForClient.xml";
            if (!System.IO.File.Exists(path)) return;
            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            xmlDoc.Load(path);
            var root = xmlDoc.SelectSingleNode("Configers");
            if (root == null) return;

            //读取人员信息
            XmlNodeList nodelist = root.SelectSingleNode("UserInfos").SelectNodes("UserInfo");
            foreach (XmlNode item in nodelist)
            {
                UserInfo ui = new UserInfo();
                ui.Name = item.Attributes["Name"].Value.ToString();

                mvvm.UserInfoList.Add(ui);
            }
            listBoxperson.ItemsSource = mvvm.UserInfoList;

            //读取当前人
            _currentuser = root.SelectSingleNode("LogUsers").SelectSingleNode("LogUser").Attributes["Name"].Value.ToString();

            //读取服务器IP和Port
            _serverip = root.SelectSingleNode("ServerConfiger").Attributes["IP"].Value.ToString();
            _serverport = root.SelectSingleNode("ServerConfiger").Attributes["Port"].Value.ToString();
        }

        //发送信息
        private void btnSendMessage_Click(object sender, RoutedEventArgs e)
        {
            //消息包组成:消息类型 发件人 收件人 消息内容
            if (listBoxperson.SelectedItem != null)
            {
                if (txtMessage.Text == "")
                {
                    return;
                }
                _client.SendMessage(txtMessage.Text,PackageType.PT_TXT, _currentuser, ((UserInfo)listBoxperson.SelectedItem).Name);

                mvvm.UserInfoList.First(ui => ui.Name == ((UserInfo)listBoxperson.SelectedItem).Name).unReadMessageList.Add("12^"   _currentuser   "^"   DateTime.Now.ToString()   "^"   txtMessage.Text   "^"   "R");
                txtReceive.Text  = _currentuser   "      "   DateTime.Now.ToString()   "\n"   "  "   txtMessage.Text   "\n\n";
                txtMessage.Text = "";
            }
            else
            {
                MessageBox.Show("请选择收件人!");
            }
        }

        private System.ComponentModel.AsyncOperation _asyncOperation = System.ComponentModel.AsyncOperationManager.CreateOperation(null);
        //发送文件
        private void btnSendFile_Click(object sender, RoutedEventArgs e)
        {
            if (listBoxperson.SelectedItem != null)
            {
                Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
                dialog.Filter = "所有文件|*.*;";
                dialog.Multiselect = true;
                dialog.Title = "请选择文件";
                var result = dialog.ShowDialog();
                if (result != true) return;
                string[] filenames = dialog.FileNames;
                filenames.ToList().ForEach(fn => mvvm.FilePathList.Add(System.IO.Path.GetFileName(fn)));
                _client.SendFile(filenames.ToList(), _currentuser, ((UserInfo)listBoxperson.SelectedItem).Name);
            }
            else
            {
                MessageBox.Show("请选择收件人!");
            }
        }

        //退出时释放资源
        protected override void OnClosed(EventArgs e)
        {
            //消息类型为0的消息为向服务器注册IP的消息,为1的消息为文本消息,
            _client.SendMessage("退出服务器", PackageType.PT_LOGOUT, _currentuser, "服务器");

            Environment.Exit(0);
            base.OnClosed(e);
        }
    }

    public class MainWindowViewModel : System.ComponentModel.INotifyPropertyChanged
    {
        public MainWindow _window;
             
        public MainWindowViewModel(MainWindow win)
        {
            _window = win;
        }

        public ObservableCollection<UserInfo> userinfolist;
        public ObservableCollection<UserInfo> UserInfoList
        {
            get
            {
                return userinfolist;
            }
            set
            {
                userinfolist = value;
                OnPropertyChanged("UserInfoList");
            }
        }

        public ObservableCollection<string> filePathList;
        public ObservableCollection<string> FilePathList
        {
            get
            {
                return filePathList;
            }
            set
            {
                filePathList = value;
                OnPropertyChanged("FilePathList");
            }
        }

        private System.ComponentModel.AsyncOperation _asyncOperation = System.ComponentModel.AsyncOperationManager.CreateOperation(null);
        public UserInfo selectUserInfo;
        public UserInfo SelectUserInfo
        {
            get
            {
                return selectUserInfo;
            }
            set
            {
                selectUserInfo = value;
                OnPropertyChanged("SelectUserInfo");

                //当选中项不为空时,将选中项缓存数据全部加载出,并将未读数据条数变为0
                if (selectUserInfo != null)
                {
                    _window.txtReceive.Text = "";

                    
                    SelectUserInfo.UnReadMessageCount = 0;
                    SelectUserInfo.unReadMessageList.ForEach(urm =>
                    {
                        string[] recvmessage = urm.Split('^');
                        _window.txtReceive.Text  = recvmessage[1]   "      "   recvmessage[2]   "\n"   "  "   recvmessage[3]   "\n\n";
                    });
                }
            }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null) PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

实例下载地址

基于TCP的消息和文件传输

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

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

查看所有0条评论>>

小贴士

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

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

关于好例子网

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

;
报警