zoukankan      html  css  js  c++  java
  • c# socket传送大文件

    c# socket传送大文件using System;
    using System.Threading;
    using System.Net;

    namespace FileSender
    {
        class Program
        {
            static void Main(string[] args)
            {
                string file = Console.ReadLine();
                IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 520);
                Thread rThread = new Thread(() => FileSender.Receive(ip, "E:\\"));//接受放到那个盘里 保存路径=这个参数+发送到文件名。
                rThread.IsBackground = true;
                rThread.Start();
                Thread sThread = new Thread(() => FileSender.Send(ip, file));//发送到文件,不存在会抛异常。
                sThread.IsBackground = true;
                sThread.Start();
                Console.ReadLine();
            }
        }
    }

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using System.Text;

    namespace FileSender
    {
        public static class FileSender
        {
            private const int BufferSize = 1024;

            public static void Send(IPEndPoint ip, string path)
            {
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Connect(ip);
                using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    long send = 0L, length = reader.Length;
                    sock.Send(BitConverter.GetBytes(length));
                    string fileName = Path.GetFileName(path);
                    sock.Send(Encoding.Default.GetBytes(fileName));
                    Console.WriteLine("Sending file:" + fileName + ".Plz wait...");
                    byte[] buffer = new byte[BufferSize];
                    int read, sent;
                    while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
                    {
                        sent = 0;
                        while ((sent += sock.Send(buffer, sent, read, SocketFlags.None)) < read)
                        {
                            send += (long)sent;
                            //Console.WriteLine("Sent " + send + "/" + length + ".");//进度
                        }
                    }
                    Console.WriteLine("Send finish.");
                }
            }

            public static void Receive(IPEndPoint ip, string path)
            {
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Bind(ip);
                sock.Listen(1);
                Socket client = sock.Accept();
                byte[] buffer = new byte[BufferSize];
                client.Receive(buffer);
                long receive = 0L, length = BitConverter.ToInt64(buffer, 0);
                string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer));
                Console.WriteLine("Receiveing file:" + fileName + ".Plz wait...");
                using (FileStream writer = new FileStream(Path.Combine(path, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    int received;
                    while (receive < length)
                    {
                        received = client.Receive(buffer);
                        writer.Write(buffer, 0, received);
                        writer.Flush();
                        receive += (long)received;
                        //Console.WriteLine("Received " + receive + "/" + length + ".");//进度
                    }
                }
                Console.WriteLine("Receive finish.");
            }
        }
    }

  • 相关阅读:
    CC学iOS杂记 001_Device
    低字节序和高字节序相互转换(Little Endian/Big Endian)
    wpf 控件复制 克隆
    压缩图片
    网络流转换为Byte数组
    JS屏蔽右键菜单,复制,粘帖xxxxx........
    记录详细错误信息
    Media Queries详解--转
    解决 asp.net 伪静态 IIS设置后 直正HTML无法显示的问题
    对C#泛型实例化对像--转
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175777.html
Copyright © 2011-2022 走看看