Guest User

Untitled

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