Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Xml.Serialization;
- using System.Diagnostics;
- using System.Threading;
- namespace BS_6_server
- {
- public class Program
- {
- public class FileDetails
- {
- public string FILETYPE = "";
- public long FILESIZE = 0;
- }
- static FileDetails fileDet = new FileDetails();
- static IPAddress remoteIPAddress;
- static int remotePort = 8002;
- static UdpClient sender = new UdpClient();
- static IPEndPoint endPoint;
- static FileStream fs;
- static int localPort = 8001;
- static UdpClient receiver;
- static IPEndPoint RemoteIpEndPoint = null;
- static Byte[] data = new Byte[0];
- static int k = 1;
- static string file = "";
- static Thread receiveThread;
- static void Main(string[] args)
- {
- try
- {
- IPHostEntry ipHost = Dns.GetHostByName(Dns.GetHostName());
- remoteIPAddress = ipHost.AddressList[0];
- endPoint = new IPEndPoint(remoteIPAddress, remotePort);
- Console.WriteLine("Сервер подключен к {0} Слушает порт {1}", endPoint, localPort);
- receiveThread = new Thread(new ThreadStart(ReceiveFile));
- receiveThread.IsBackground = true;
- receiveThread.Start();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- finally
- {
- Console.ReadLine();
- }
- }
- private static void SendFile()
- {
- try
- {
- for (int i = 0; i < file.Length; i++)
- {
- if (file[i] == '.')
- {
- k = (file.Length - 1) - i;
- }
- }
- fs = new FileStream(@file, FileMode.Open, FileAccess.Read);
- Console.WriteLine("Файл такой есть " + @file);
- file = "";
- Byte[] bytes = new Byte[fs.Length];
- fs.Read(bytes, 0, bytes.Length);
- Console.WriteLine("Отправка файла размером " + fs.Length + " байт");
- SendFileInfo();
- //Thread.Sleep(2000);
- sender.Send(bytes, bytes.Length, endPoint);
- fs.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- finally
- {
- //sender.Close();
- }
- }
- private static void ReceiveFile()
- {
- receiver = new UdpClient(localPort);
- try
- {
- while (true)
- {
- file = "";
- byte[] data = receiver.Receive(ref RemoteIpEndPoint);
- string message = Encoding.Unicode.GetString(data);
- if (message == "exit")
- {
- Console.WriteLine("Клиент завершил сеанс работы с сервером");
- break;
- }
- if (message.Length > 0)
- {
- for (int i = 5; i < message.Length; i++)
- {
- file += message[i];
- }
- Console.WriteLine("От клиента пришел запрос на загрузку файла с расположением " + file);
- message = "";
- SendFile();
- }
- else
- {
- GetFileDetails();
- Console.WriteLine("-----------*******Ожидайте получение файла*******-----------");
- data = receiver.Receive(ref RemoteIpEndPoint);
- Console.WriteLine("----Файл получен...Сохраняем...");
- fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
- fs.Write(data, 0, data.Length);
- Console.WriteLine("----Файл сохранен...");
- fs.Close();
- }
- }
- }
- catch (Exception ex)
- {
- file = "";
- Console.WriteLine(ex.Message);
- }
- finally
- {
- receiver.Close();
- }
- }
- private static void GetFileDetails()
- {
- try
- {
- Console.WriteLine("\n-----------*******Ожидание информации от клиента*******-----------");
- data = receiver.Receive(ref RemoteIpEndPoint);
- Console.WriteLine("----Информация о файле получена!");
- XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
- MemoryStream stream1 = new MemoryStream();
- stream1.Write(data, 0, data.Length);
- stream1.Position = 0;
- fileDet = (FileDetails)fileSerializer.Deserialize(stream1);
- Console.WriteLine("Получен файл типа ." + fileDet.FILETYPE +
- " имеющий размер " + fileDet.FILESIZE.ToString() + " байт");
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- }
- }
- public static void SendFileInfo()
- {
- try
- {
- fileDet.FILETYPE = fs.Name.Substring((int)fs.Name.Length - k, k);
- fileDet.FILESIZE = fs.Length;
- XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
- MemoryStream stream = new MemoryStream();
- fileSerializer.Serialize(stream, fileDet);
- stream.Position = 0;
- Byte[] bytes = new Byte[stream.Length];
- stream.Read(bytes, 0, Convert.ToInt32(stream.Length));
- Console.WriteLine("Отправка деталей файла...");
- sender.Send(bytes, bytes.Length, endPoint);
- Console.WriteLine("Файл отправлен\n");
- stream.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement