Подключение нескольких клиентов одновременно - C#

Узнай цену своей работы

Формулировка задачи:

Есть клиент и сервер. Клиент передает файл на сервер, всё отлично всё работает. Следующие задание звучит так: Доработать программный комплекс из задачи №2 для обеспечения возможности подключения нескольких клиентов одновременно. Помимо отправки сообщения должна быть предусмотрена возможность передачи управляющих воздействий. Объясните, что надо сделать. От разных клиентов посылать разные файлы, которые сохраняются на сервер? Или что? Программы прилагаются

Решение задачи: «Подключение нескольких клиентов одновременно»

textual
Листинг программы
using System;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Net.Sockets;
using System.Xml.Serialization;
using System.Text;
 
public class UdpFileClient
{
    //Детали файла
    [Serializable]
    public class FileDetails
    {
        public string FILETYPE = "";
        public long FILESIZE = 0;
    }
    private static FileDetails fileDet;
 
    //Поля, связанные с UdpClient
    private static int localPort = 5002;
    private static UdpClient receivingUdpClient = new UdpClient(localPort);
    private static IPEndPoint RemoteIpEndPoint = null;
 
    private static FileStream fs;
    private static Byte[] receiveBytes = new Byte[0];
 
    [STAThread]
    static void Main(string[] args)
        {
            //Получаем информацию о файле
            GetFileDetails();
            //Получаем файл
            ReceiveFile();
        }
    private static void GetFileDetails()
    {
        try
        {
            Console.WriteLine("----------Ожидание информации о файле----------");
 
            //Получаем информацию о файле
            receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
            Console.WriteLine("Информация о файле получена");
 
            XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
            MemoryStream stream1 = new MemoryStream();
 
            //Считываем информацию о файле
            stream1.Write(receiveBytes, 0, receiveBytes.Length);
            stream1.Position = 0;
 
            //Вызываем метод Deserialize
            fileDet = (FileDetails)fileSerializer.Deserialize(stream1);
            Console.WriteLine("Получен файл типа ." + fileDet.FILETYPE +
                "имеющий размер" + fileDet.FILESIZE.ToString() + "байт");
        }
        catch (Exception eR)
        {
            Console.WriteLine(eR.ToString());
        }
    }
    public static void ReceiveFile()
    {
        try
        {
            Console.WriteLine("----------Ожидайте получение файла----------");
            
            //Получаем файл
            receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
 
            //Преобразуем и отображаем данные
            Console.WriteLine("-----Файл получен-----");
 
            //Создаем временный файл с полученным расширением
            fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            fs.Write(receiveBytes, 0, receiveBytes.Length);
 
            Console.WriteLine("---Файл сохранен---");
            Console.WriteLine("--Открытие файла--");
 
            //Открываем файл связанной с ним программой
            Process.Start(fs.Name);
        }
        catch (Exception eR)
        {
            Console.WriteLine(eR.ToString());
        }
        finally
        {
            fs.Close();
            receivingUdpClient.Close();
            Console.Read();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы