Корпус коммутатора не меняется - PullRequest
0 голосов
/ 11 апреля 2020

Ссылка на репозиторий проекта Github

это сервер

static void Main(string[] args)
        {
            string path = Directory.GetCurrentDirectory();
            List<string> filesList = new List<string>();
            IPAddress hostname = IPAddress.Parse("192.168.0.253");
            Int32 port = 9999;
            TcpListener server = null;
            TcpClient client = null;
            string data = null;
            BinaryFormatter bf = new BinaryFormatter();

            server = new TcpListener(hostname, port);
            server.Start();
            Console.WriteLine("server has started ");
            client = server.AcceptTcpClient();
            Console.WriteLine("server accepts clients now");
            NetworkStream dataStream = client.GetStream();
            Console.WriteLine("server started data stream");
            byte[] bytes = new byte[client.ReceiveBufferSize];
            dataStream.Read(bytes, 0, bytes.Length);
            data = System.Text.Encoding.ASCII.GetString(bytes);
            string cleanData = data.Replace("\0", "");
            Console.WriteLine(cleanData);
            do
            {
                try
                {

вот проблема

                    switch (cleanData)
                    {
                        case "1":
                            List<string> dir = new List<string>();
                            string message = $"Current path is: {path}";
                            dir.Add(message);
                            bf.Serialize(dataStream, dir);
                            dataStream.Flush();

                            break;
                        case "2":
                            string[] files = Directory.GetFiles(path);
                            foreach (var file in files)
                            {
                                filesList.Add(file);

                            }

                            bf.Serialize(dataStream, filesList);
                            filesList.Clear();
                            filesList.ForEach(Console.WriteLine);
                            dataStream.Flush();

                            break;
                        default:
                            Console.WriteLine("waiting for input");

                            dataStream.Flush();

                            break;
                    }
            }
            catch (Exception e)
            {
                throw e;
            }
        } while (true);

    }

это клиент

public partial class Form1 : Form
    {

        string hostname = "192.168.0.253";
        int port = 9999;
        TcpClient client = new TcpClient();
        NetworkStream serverStream = default(NetworkStream);


        public Form1()
        {
            InitializeComponent();
            client.Connect(hostname, port);
            checkedListBox1.Items.Add("Connected to the main server");
        }


        private void GetList()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            serverStream = client.GetStream();
            int buff = 0;
            byte[] instream = new byte[client.ReceiveBufferSize];
            buff = client.ReceiveBufferSize;
            List<string> data = (List<string>)formatter.Deserialize(serverStream);
            //string data = System.Text.Encoding.ASCII.GetString(instream);
            foreach (var item in data)
            {
                checkedListBox1.Items.Add(item);

            }
            serverStream.Flush();
            return;


        }

        private void getData()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            serverStream = client.GetStream();
            int buff = 0;
            byte[] instream = new byte[client.ReceiveBufferSize];
            buff = client.ReceiveBufferSize;
            List<string> data = (List<string>)formatter.Deserialize(serverStream);
            foreach (var item in data)
            {
                checkedListBox1.Items.Add(item);
            }

            serverStream.Flush();
            return;
        }

        private void ShowItems_Click(object sender, EventArgs e)
        {
            string message = "2";
            byte[] dataToSend = Encoding.ASCII.GetBytes(message);
            NetworkStream dataStream = client.GetStream();
            dataStream.Write(dataToSend, 0, dataToSend.Length);
            dataStream.Flush();
            GetList();
            return;
        }

        private void ReloadItems_Click(object sender, EventArgs e)
        {
            checkedListBox1.Items.Clear();
            string message = "2";
            byte[] dataToSend = Encoding.ASCII.GetBytes(message);
            NetworkStream dataStream = client.GetStream();
            dataStream.Write(dataToSend, 0, dataToSend.Length);
            dataStream.Flush();
            GetList();
            return;

        }

        private void DownloadItems_Click(object sender, EventArgs e)
        {
            List<string> itemsToDownload = new List<string>();
            foreach (var item in checkedListBox1.CheckedItems)
            {
                itemsToDownload.Add(item as string);
            }
            return;
        }

        private void ShowDir_Click(object sender, EventArgs e)
        {

            string message = "1";
            byte[] dataToSend = Encoding.ASCII.GetBytes(message);
            NetworkStream dataStream = client.GetStream();
            dataStream.Write(dataToSend, 0, dataToSend.Length);
            dataStream.Flush();
            getData();
            return;
        }
    }
}

Поэтому я пытаюсь сделать этот сервер хранения данных с клиентом, чтобы иметь возможность загружать и хранить все мои данные на одном устройстве, что-то вроде моего собственного облака, но у меня возникла проблема, которую я не могу решить, и это связано с оператором switch на сервере, кажется, что он застревает на коммутаторе, если я удаляю do l oop это просто завершает программу.
Я также добавил клиентскую сторону и репозиторий github, если есть необходимость запустить программу.

Сервер сделан. net -Core и клиент в windows форме приложения на Visual Studio 2019

1 Ответ

0 голосов
/ 13 апреля 2020

, где требуется do l oop, мне нужно было добавить переменную cleadata для пересчета sh значения переключателя каждый раз, когда переключатель отключается

            do
            {
                    data = System.Text.Encoding.ASCII.GetString(bytes);
                    string cleanData = data.Replace("\0", ""); 
                    Console.WriteLine(cleanData); 
                try
                {

                    switch (cleanData)
                    {
                        case "1":
                            List<string> dir = new List<string>();
                            string message = $"Current path is: {path}";
                            dir.Add(message);
                            bf.Serialize(dataStream, dir);
                            dataStream.Flush();

                            break;
                        case "2":
                            string[] files = Directory.GetFiles(path);
                            foreach (var file in files)
                            {
                                filesList.Add(file);

                            }

                            bf.Serialize(dataStream, filesList);
                            filesList.Clear();
                            filesList.ForEach(Console.WriteLine);
                            dataStream.Flush();

                            break;
                        default:
                            Console.WriteLine("waiting for input");

                            dataStream.Flush();

                            break;
                    }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...