日期:2014-05-18 浏览次数:20933 次
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."); } } }
?