iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# TcpClient网络编程传输文件的示例
  • 698
分享到

C# TcpClient网络编程传输文件的示例

2024-04-02 19:04:59 698人浏览 薄情痞子
摘要

目录一、简述二、内容一、简述   利用C# tcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名与文件一起发过去呢? 二、内容

一、简述

  利用C# tcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名与文件一起发过去呢?

二、内容

  如上图,把文件名字符流的长度的值的字符流(这个文件名字符流长度的值固定是11位的字符串,不足11位前面补0)与文件名的字符流合为一个byte数组然后与文件发送到对面。对面接收后解析出文件名字符流长度的值后,再根据长度解析出文件名,接下来再获取文件流。

  服务端


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.windows.FORMs;

namespace TCPSendFile
{
    public partial class Form1 : Form
    {
        public delegate void TxtReceiveAddContentEventHandler(string txtValue);
        
        public Form1()
        {
            InitializeComponent();
        }
       
        public void TxtAddContent(string txtValue)
        {
            if (textBox1.InvokeRequired)
            {
                TxtReceiveAddContentEventHandler addContent = TxtAddContent;
                textBox1.Invoke(addContent, new object[] { txtValue });
            }
            else
            {
                textBox1.Text = txtValue + "\r\n" + textBox1.Text;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

            TcpListener tcpListener = new TcpListener(IPAddress.Any, 18001);
            tcpListener.Start();
            textBox1.Text = "开始侦听...";
            Thread thread = new Thread(SendFileFunc);
            thread.Start(tcpListener);
            thread.IsBackground = true;
        }

        public void SendFileFunc(object obj)
        {
            TcpListener tcpListener = obj as TcpListener;
            while (true)
            {
                try
                {
                    TcpClient tcpClient = tcpListener.AcceptTcpClient();
                    if (tcpClient.Connected)
                    {
                        NetworkStream stream = tcpClient.GetStream();
                        string fileName = "testfile.rar";

                        byte[] fileNameByte = Encoding.Unicode.GetBytes(fileName);

                        byte[] fileNameLengthForValueByte = Encoding.Unicode.GetBytes(fileNameByte.Length.ToString("D11"));
                        byte[] fileAttributeByte = new byte[fileNameByte.Length + fileNameLengthForValueByte.Length];
                       
                        fileNameLengthForValueByte.CopyTo(fileAttributeByte, 0);  //文件名字符流的长度的字符流排在前面。
                      
                        fileNameByte.CopyTo(fileAttributeByte, fileNameLengthForValueByte.Length);  //紧接着文件名的字符流
                     
                        stream.Write(fileAttributeByte, 0, fileAttributeByte.Length);
                        FileStream fileStrem = new FileStream(Application.StartupPath + "\\WEBFile\\" + fileName, FileMode.Open);

                        int fileReadSize = 0;
                        long fileLength = 0;
                        while (fileLength < fileStrem.Length)
                        {
                            byte[] buffer = new byte[2048];
                            fileReadSize = fileStrem.Read(buffer, 0, buffer.Length);
                            stream.Write(buffer, 0, fileReadSize);
                            fileLength += fileReadSize;

                        }
                        fileStrem.Flush();
                        stream.Flush();
                        fileStrem.Close();
                        stream.Close();

                        TxtAddContent(string.Format("{0}文件发送成功", fileName));
                    }

                   
                }
                catch (Exception ex)
                {
                    
                }
            }
        }
    }
}

  客户端


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

namespace TCPReceiveFile
{
    public partial class Form1 : Form
    {
        public delegate void TxtReceiveAddContentEventHandler(string txtValue);
        public Form1()
        {
            InitializeComponent();
        }
        public void TxtReceiveAddContent(string txtValue)
        {
            if (txtReceive.InvokeRequired)
            {
                TxtReceiveAddContentEventHandler addContent = TxtReceiveAddContent;
                txtReceive.Invoke(addContent, new object[] { txtValue });
            }
            else
            {
                txtReceive.Text = txtValue + "\r\n" + txtReceive.Text;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 18001);
            TxtReceiveAddContent("连接中。。。。。");
            Thread th = new Thread(ReceiveFileFunc);
            th.Start(ipEndPoint);
            th.IsBackground = true;
        }

        private void ReceiveFileFunc(object obj)
        {
            IPEndPoint ipEndPoint = obj as IPEndPoint;
            TcpClient tcpClient = new TcpClient();
            try
            {
                tcpClient.Connect(ipEndPoint);
            }
            catch
            {
                TxtReceiveAddContent("连接失败,找不到服务器!");
            }

            if (tcpClient.Connected)
            {
               
                NetworkStream stream = tcpClient.GetStream();
                if (stream != null)
                {

                    byte[] fileNameLengthForValueByte = Encoding.Unicode.GetBytes((256).ToString("D11"));
                    byte[] fileNameLengByte = new byte[1024];
                    int fileNameLengthSize = stream.Read(fileNameLengByte, 0, fileNameLengthForValueByte.Length);
                    string fileNameLength = Encoding.Unicode.GetString(fileNameLengByte, 0, fileNameLengthSize);
                    TxtReceiveAddContent("文件名字符流的长度为:" + fileNameLength);

                    int fileNameLengthNum = Convert.ToInt32(fileNameLength);
                    byte[] fileNameByte = new byte[fileNameLengthNum];

                    int fileNameSize = stream.Read(fileNameByte, 0, fileNameLengthNum);
                    string fileName = Encoding.Unicode.GetString(fileNameByte, 0, fileNameSize);
                    TxtReceiveAddContent("文件名为:" + fileName);

                    string dirPath = Application.StartupPath + "\\WebFile";
                    if(!Directory.Exists(dirPath))
                    {
                        Directory.CreateDirectory(dirPath);
                    }
                    FileStream fileStream = new FileStream(dirPath + "\\" + fileName, FileMode.Create, FileAccess.Write);
                    int fileReadSize = 0;
                    byte[] buffer = new byte[2048];
                    while ((fileReadSize = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fileStream.Write(buffer, 0, fileReadSize);

                    }
                    fileStream.Flush();
                    fileStream.Close();
                    stream.Flush();
                    stream.Close();
                    tcpClient.Close();
                    TxtReceiveAddContent("接收成功");
                }
            }
        }
      
    }
}

  实例图

以上就是C# TcpClient网络编程传输文件的示例的详细内容,更多关于C# TcpClient传输文件的资料请关注编程网其它相关文章!

--结束END--

本文标题: C# TcpClient网络编程传输文件的示例

本文链接: https://www.lsjlt.com/news/123903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# TcpClient网络编程传输文件的示例
    目录一、简述二、内容一、简述   利用C# TcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名与文件一起发过去呢? 二、内容 ...
    99+
    2024-04-02
  • python中网络通信数据传输的示例
    这篇文章给大家分享的是有关python中网络通信数据传输的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python实现网络通信数据传输前言基础知识学习一、OSI 模型二、TCP、IP协议族:三、python...
    99+
    2023-06-06
  • Vue.js之axios与网络传输的示例分析
    这篇文章主要介绍Vue.js之axios与网络传输的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为何放弃vue-resource?Ajax 本身跟 Vue 并没有什么需要特...
    99+
    2024-04-02
  • Java网络编程的示例分析
    小编给大家分享一下Java网络编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、网络编程1.1、概述计算机网络是通过传输介质、通信设施和网络通信协议...
    99+
    2023-06-15
  • C++ 函数在网络编程中如何实现数据传输?
    c++++ 的网络数据传输函数包括 recv() 和 send(),用于服务器端接收和发送数据。以下步骤演示了使用 recv() 和 send() 创建回显服务器的过程:1. 创建套接字...
    99+
    2024-04-27
    网络编程 数据传输 c++
  • Java网络编程TCP实现文件上传功能
    本文实例为大家分享了Java网络编程TCP实现文件上传的具体代码,供大家参考,具体内容如下 上一篇博客,用网络编程TCP 实现聊天,这次实现文件上传。 客户端: package ...
    99+
    2024-04-02
  • Java之网络编程的示例分析
    小编给大家分享一下Java之网络编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java基础之网络编程基本概念IP:每个电脑都有一个IP地址,在局域网...
    99+
    2023-06-20
  • Java读取传输FTP文件实现示例
    目录一.需求二.依赖三.关键源码3.0 配置信息3.1 获取客户端3.2 获取ftp文件3.3 关闭ftp服务连接四.总结参考资料一.需求 FTP作为文件服务器,由提供服务方提供远程...
    99+
    2023-05-18
    Java读取传输FTP文件 Java读取FTP文件
  • 详谈C++ socket网络编程实例
    目录功能源码效果总结 功能 实现基于sokcet的Cpp服务端 TIPS:功能包括接收客户端的数据,向客户端发送数据。 源码 #define _WINSOCK_DEPRECA...
    99+
    2024-04-02
  • C++中简单的文本文件输入/输出示例详解
    为了便于理解,我们把cout 用于控制台输出时的一些情况和写入到文本文件的情况进行类比: cout 控制台输出 包含头文件 iostream 头文件 iostream 定义了一个 o...
    99+
    2024-04-02
  • Oracle工具之--ASM与文件系统及跨网络传输文件
    Oracle工具之--ASM与文件系统及跨网络传输文件  Oracle DBMS_FILE_TRANSFER可以实现文件系统和ASM磁盘组之间实现文件传输及ASM磁盘组之间跨网络的传输。...
    99+
    2024-04-02
  • Java网络编程TCP怎么实现文件上传功能
    这篇文章给大家分享的是有关Java网络编程TCP怎么实现文件上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下客户端:package com.kuang.lesson02;import&...
    99+
    2023-06-20
  • 详谈C++ socket网络编程实例(2)
    目录功能源码效果总结 功能 完成Cpp客户端简单功能,可收发数据。 Cpp服务端实例地址:【点击跳转】 源码 #define _WINSOCK_DEPRECATED_NO_W...
    99+
    2024-04-02
  • Java使用Socket通信传输文件的方法示例
    本文实例讲述了Java使用Socket通信传输文件的方法。分享给大家供大家参考,具体如下:前面几篇文章介绍了使用Java的Socket编程和NIO包在Socket中的应用,这篇文章说说怎样利用Socket编程来实现简单的文件传输。这里由于前...
    99+
    2023-05-31
    java socket ava
  • Redhat网络相关配置文件的示例分析
    这篇文章将为大家详细讲解有关Redhat网络相关配置文件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联...
    99+
    2023-06-04
  • C++ 函数在网络编程中如何处理网络事件?
    c++++ 中使用 select() 函数处理网络事件的方法如下:使用 fd_set 声明文件描述符集合,并初始化它们设置超时时间使用 select() 函数监控文件描述符的事件检查 s...
    99+
    2024-04-27
    c++ 网络编程
  • java编程实现简单的网络爬虫示例过程
    本项目中需要用到两个第三方jar包,分别为 jsoup 和 commons-io。 jsoup的作用是为了解析网页, commons-io 是为了把数据保存到本地。 1.爬取贴吧 第...
    99+
    2024-04-02
  • PHP HTTP 编程基础:文件下载与文件传输协议的关系。
    PHP HTTP 编程基础:文件下载与文件传输协议的关系 在 web 应用程序中,文件下载是一个常见的需求。当我们需要让用户下载一个文件时,我们可以使用 PHP 来实现这个功能。在本文中,我们将深入探讨 PHP 文件下载的基础知识,并介绍文...
    99+
    2023-09-19
    http 面试 文件
  • 如何解决Java编码及网络传输中的编码问题
    这篇文章给大家介绍如何解决Java编码及网络传输中的编码问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。近来试着FTP搜索,遇到编码问题,研究了下。Java内部的String为Unicode编码,每个字符占两个字节。...
    99+
    2023-06-17
  • FileZilla FTP Server中文件传输压缩设置的示例分析
    这篇文章将为大家详细讲解有关FileZilla FTP Server中文件传输压缩设置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们首先了解选FileZilla的Filetransfer c...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作