using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;
namespace Server { class Program { 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);
while(true) { Socket client = sock.Accept();
if (client.Connected) { Thread clientThread = new Thread(new ParameterizedThreadStart(MyClient)); clientThread.IsBackground = true; clientThread.Start(client); } } }
private const int BUFFERSIZE = 1024/* * 1024*/; private static string _path = @"D:\\";
private static void MyClient(object socket) { Socket clientSocket = socket as Socket; string clientName = clientSocket.RemoteEndPoint.ToString(); Console.WriteLine("新客户端连接:" + clientName);
try { while(true) { byte[] buffer = new byte[BUFFERSIZE]; int countReceive = clientSocket.Receive(buffer); string receiveStr = Encoding.Default.GetString(buffer, 0, countReceive); Console.WriteLine("收到:" + clientName + ":" + receiveStr); string[] command = receiveStr.Split(',');
string fileName = null; long fileLength = -1L;
if (command[0] == "nameAndLength") { fileName = command[1]; fileLength = long.Parse(command[2]); clientSocket.Send(Encoding.Default.GetBytes("ok")); Console.WriteLine("接收文件:" + fileName + " 请等候……");
long recieved = 0L;
using (FileStream fsWriter = new FileStream(Path.Combine(_path,fileName), FileMode.Create, FileAccess.Write, FileShare.None)) { int recive;
while(recieved < fileLength) { recive = clientSocket.Receive(buffer); fsWriter.Write(buffer, 0, recive); fsWriter.Flush(); recieved += recive; Console.WriteLine("已接收数据:{0}/{1}", recieved.ToString(), fileLength.ToString()); }
Console.WriteLine("接收完成……\\n"); } } } } catch (Exception) { Console.WriteLine("客户端:" + clientName + "退出"); } } } }
评论前必须登录!
注册