Socket 发送文件示例 C# 多线程[转]
2013-02-13 14:48
399 查看
控制台界面,分服务器端与客户端,经测试,多个客户端能成功同时发送大文件给服务器端
服务器端:
客户端:
原文地址:http://www.cnblogs.com/weeksun23/archive/2012/01/04/2311978.html
注: 同时发送接收需使用不同端口
服务器端:
class Program { const int BufferSize = 1024; static string path = @"E:\"; static void Main(string[] args) { IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Bind(ip); sock.Listen(1); Console.WriteLine("Begin listen..."); while (true) { Socket client = sock.Accept(); if (client.Connected) { Thread cThread = new Thread(new ParameterizedThreadStart(myClient)); cThread.IsBackground = true; cThread.Start(client); } } } static void myClient(object oSocket) { Socket clientSocket = (Socket)oSocket; string clientName = clientSocket.RemoteEndPoint.ToString(); Console.WriteLine("新来一个客户:" + clientName); try { while (true) { byte[] buffer = new byte[BufferSize]; int count = clientSocket.Receive(buffer); Console.WriteLine("收到" + clientName + ":" + Encoding.Default.GetString(buffer, 0, count)); string[] command = Encoding.Default.GetString(buffer, 0, count).Split(','); string fileName; long length; if (command[0] == "namelength") { fileName = command[1]; length = Convert.ToInt64(command[2]); clientSocket.Send(Encoding.Default.GetBytes("OK")); long receive = 0L; 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 = clientSocket.Receive(buffer); writer.Write(buffer, 0, received); writer.Flush(); receive += (long)received; } } Console.WriteLine("Receive finish.\n"); } } } catch { Console.WriteLine("客户:" + clientName + "退出"); } } }
客户端:
class Program { static Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); static void Main(string[] args) { sock.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080)); Console.WriteLine("Connect successfully"); while (true) { Console.WriteLine("please input the path of the file which you want to send:"); string path = Console.ReadLine(); try { using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None)) { long send = 0L, length = reader.Length; string sendStr = "namelength," + Path.GetFileName(path) + "," + length.ToString(); string fileName = Path.GetFileName(path); sock.Send(Encoding.Default.GetBytes(sendStr)); int BufferSize = 1024; byte[] buffer = new byte[32]; sock.Receive(buffer); string mes = Encoding.Default.GetString(buffer); if (mes.Contains("OK")) { Console.WriteLine("Sending file:" + fileName + ".Plz wait..."); byte[] fileBuffer = new byte[BufferSize]; int read, sent; while ((read = reader.Read(fileBuffer, 0, BufferSize)) != 0) { sent = 0; while ((sent += sock.Send(fileBuffer, sent, read, SocketFlags.None)) < read) { send += (long)sent; } } Console.WriteLine("Send finish.\n"); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
原文地址:http://www.cnblogs.com/weeksun23/archive/2012/01/04/2311978.html
注: 同时发送接收需使用不同端口
相关文章推荐
- C# Socket 多线程可断点传送大文件3
- C#.net同步异步SOCKET通讯和多线程总结(5)tcp发送和接受的代码
- C#使用Socket发送和接收TCP数据示例
- C# socket 多线程多管道可断点传送大文件(附单线程单管道传送)
- Socket通讯-C#客户端与Java服务端通讯(发送消息和文件)
- C# websocket与html js实现文件发送与接收处理
- C#线程池多线程Socket通讯 服务器端和客户端示例
- C# websocket与html js实现文件发送与接收处理
- C#线程池多线程Socket通讯 服务器端和客户端示例
- C# HttpWebRequest可断点上传,下载文件;SOCKET多线程多管道可断点传送大文件
- Java编程利用socket多线程访问服务器文件代码示例
- C# socket,Tcp和Udp 示例
- C#中Socket多线程编程实例 (转)
- C# 多线程的控制代码示例
- c#利用webmail邮件系统发送邮件示例分享
- C#中Socket多线程编程实例(转载)
- C# 多线程写文件,时常写不成功
- c#(Socket)同步套接字代码示例
- C#的Socket简单实现消息发送
- C# 实现的多线程异步Socket数据包接收器框架