c# socket传送大文件分享代码

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;
                 //断点发送 在这里判断设置reader.Position即可
                 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;
                 //断点接受 在这里判断设置writer.Position即可
                 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." );
         }
     }
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值