读书人

c# socket传接大文件

发布时间: 2012-09-06 10:37:01 作者: rapoo

c# socket传送大文件

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.");        }    }}

?

读书人网 >C#

热点推荐