Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.84 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6. using System.Xml.Serialization;
  7. using System.Diagnostics;
  8. using System.Threading;
  9.  
  10. namespace BS_6_server
  11. {
  12.     public class Program
  13.     {
  14.         public class FileDetails
  15.         {
  16.             public string FILETYPE = "";
  17.             public long FILESIZE = 0;
  18.         }
  19.  
  20.         static FileDetails fileDet = new FileDetails();
  21.  
  22.         static IPAddress remoteIPAddress;
  23.         static int remotePort = 8002;
  24.         static UdpClient sender = new UdpClient();
  25.         static IPEndPoint endPoint;
  26.         static FileStream fs;
  27.  
  28.         static int localPort = 8001;
  29.         static UdpClient receiver;
  30.         static IPEndPoint RemoteIpEndPoint = null;
  31.         static Byte[] data = new Byte[0];
  32.  
  33.         static int k = 1;
  34.         static string file = "";
  35.         static Thread receiveThread;
  36.  
  37.         static void Main(string[] args)
  38.         {
  39.             try
  40.             {
  41.                 IPHostEntry ipHost = Dns.GetHostByName(Dns.GetHostName());
  42.                 remoteIPAddress = ipHost.AddressList[0];
  43.                 endPoint = new IPEndPoint(remoteIPAddress, remotePort);
  44.                 Console.WriteLine("Сервер подключен к {0} Слушает порт {1}", endPoint, localPort);
  45.                 receiveThread = new Thread(new ThreadStart(ReceiveFile));
  46.                 receiveThread.IsBackground = true;
  47.                 receiveThread.Start();
  48.             }
  49.             catch (Exception ex)
  50.             {
  51.                 Console.WriteLine(ex.Message);
  52.             }
  53.             finally
  54.             {
  55.                 Console.ReadLine();
  56.             }
  57.         }
  58.         private static void SendFile()
  59.         {
  60.             try
  61.             {
  62.                 for (int i = 0; i < file.Length; i++)
  63.                 {
  64.                     if (file[i] == '.')
  65.                     {
  66.                         k = (file.Length - 1) - i;
  67.                     }
  68.                 }
  69.  
  70.                 fs = new FileStream(@file, FileMode.Open, FileAccess.Read);
  71.                 Console.WriteLine("Файл такой есть " + @file);
  72.                 file = "";
  73.  
  74.                 Byte[] bytes = new Byte[fs.Length];
  75.                 fs.Read(bytes, 0, bytes.Length);
  76.                 Console.WriteLine("Отправка файла размером " + fs.Length + " байт");
  77.  
  78.                 SendFileInfo();
  79.                 //Thread.Sleep(2000);
  80.                 sender.Send(bytes, bytes.Length, endPoint);
  81.                 fs.Close();
  82.             }
  83.             catch (Exception ex)
  84.             {
  85.                 Console.WriteLine(ex.Message);
  86.             }
  87.             finally
  88.             {
  89.                 //sender.Close();
  90.             }
  91.         }
  92.  
  93.         private static void ReceiveFile()
  94.         {
  95.             receiver = new UdpClient(localPort);
  96.             try
  97.             {
  98.                 while (true)
  99.                 {
  100.                     file = "";
  101.                     byte[] data = receiver.Receive(ref RemoteIpEndPoint);
  102.                     string message = Encoding.Unicode.GetString(data);
  103.                     if (message == "exit")
  104.                     {
  105.                         Console.WriteLine("Клиент завершил сеанс работы с сервером");
  106.                         break;
  107.                     }
  108.                     if (message.Length > 0)
  109.                     {
  110.                         for (int i = 5; i < message.Length; i++)
  111.                         {
  112.                             file += message[i];
  113.                         }
  114.                         Console.WriteLine("От клиента пришел запрос на загрузку файла с расположением " + file);
  115.                         message = "";
  116.                         SendFile();
  117.                     }
  118.                     else
  119.                     {
  120.                         GetFileDetails();
  121.                         Console.WriteLine("-----------*******Ожидайте получение файла*******-----------");
  122.                         data = receiver.Receive(ref RemoteIpEndPoint);
  123.                         Console.WriteLine("----Файл получен...Сохраняем...");
  124.  
  125.                         fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
  126.                         fs.Write(data, 0, data.Length);
  127.  
  128.                         Console.WriteLine("----Файл сохранен...");
  129.                         fs.Close();
  130.                     }
  131.  
  132.                 }
  133.             }
  134.             catch (Exception ex)
  135.             {
  136.                 file = "";
  137.                 Console.WriteLine(ex.Message);
  138.             }
  139.             finally
  140.             {
  141.                 receiver.Close();
  142.             }
  143.         }
  144.  
  145.         private static void GetFileDetails()
  146.         {
  147.             try
  148.             {
  149.                 Console.WriteLine("\n-----------*******Ожидание информации от клиента*******-----------");
  150.  
  151.                 data = receiver.Receive(ref RemoteIpEndPoint);
  152.                 Console.WriteLine("----Информация о файле получена!");
  153.  
  154.                 XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
  155.                 MemoryStream stream1 = new MemoryStream();
  156.  
  157.                 stream1.Write(data, 0, data.Length);
  158.                 stream1.Position = 0;
  159.  
  160.                 fileDet = (FileDetails)fileSerializer.Deserialize(stream1);
  161.                 Console.WriteLine("Получен файл типа ." + fileDet.FILETYPE +
  162.                     " имеющий размер " + fileDet.FILESIZE.ToString() + " байт");
  163.             }
  164.             catch (Exception ex)
  165.             {
  166.                 Console.WriteLine(ex.ToString());
  167.             }
  168.         }
  169.  
  170.         public static void SendFileInfo()
  171.         {
  172.             try
  173.             {
  174.                 fileDet.FILETYPE = fs.Name.Substring((int)fs.Name.Length - k, k);
  175.                 fileDet.FILESIZE = fs.Length;
  176.  
  177.                 XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
  178.                 MemoryStream stream = new MemoryStream();
  179.  
  180.                 fileSerializer.Serialize(stream, fileDet);
  181.  
  182.                 stream.Position = 0;
  183.                 Byte[] bytes = new Byte[stream.Length];
  184.                 stream.Read(bytes, 0, Convert.ToInt32(stream.Length));
  185.  
  186.                 Console.WriteLine("Отправка деталей файла...");
  187.  
  188.                 sender.Send(bytes, bytes.Length, endPoint);
  189.                 Console.WriteLine("Файл отправлен\n");
  190.                 stream.Close();
  191.             }
  192.             catch (Exception ex)
  193.             {
  194.                 Console.WriteLine(ex.Message);
  195.             }
  196.         }
  197.     }
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement