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 + "退出");
}
}
}
}