Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102

Консольная программа (Сервер - Клиент)

21.09.2018, 21:32. Показов 1893. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте всем. Возникла одна проблема. Вот этот код работает (он скачивает файл с папки сервера server_files и копирует в папку клиента client_files ):
Сервер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Program
    {
        static void Main(string[] args)
        {
            var localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            var listeningSocket = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);
            listeningSocket.Bind(localEndpoint);
            listeningSocket.Listen(1); 
            Console.WriteLine("\n Waiting for client...");
            var connectedSocket = listeningSocket.Accept();
            listeningSocket.Close(); 
            Console.WriteLine("\n Client: " + connectedSocket.RemoteEndPoint.ToString());     
            int bufferSize = 1024;
            var buffer = new byte[bufferSize];        
            string f2 = "C:\\Users\\User\\Desktop\\server_files\\Course_info.txt";
            int offset = 0, lastsize = bufferSize;
            using (FileStream sr = new FileStream(f2, FileMode.Open, FileAccess.Read))
                while (sr.CanRead && lastsize > 0)
                {
                    lastsize = sr.Read(buffer, offset, bufferSize);
                    connectedSocket.Send(buffer, lastsize, SocketFlags.Partial);
                } // using-while
            connectedSocket.Close();
        }
    }
Клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void Main(string[] args)
        {
            var ownEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4321);
            var socket = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(ownEndpoint);
            Console.WriteLine("\n Trying to connect to server...");
            socket.Connect(IPAddress.Parse("127.0.0.1"), 1234);     
            string f2 = "C:\\Users\\User\\Desktop\\client_files\\Course_info.txt";
            int bufferSize = 1024;
            var buffer = new byte[bufferSize];
            int offset = 0;
            int bytesReceived = socket.Receive(buffer);
            using (FileStream sw = new FileStream(f2, FileMode.Create, FileAccess.Write))
                while (bytesReceived > 0)
                {
                    sw.Write(buffer, offset, bytesReceived);
                    bytesReceived = socket.Receive(buffer);
                }
            Console.WriteLine("file recieved");
            socket.Close();
 
        }
    }
А вот здесь этот же код не работает. Консоль клиента после команды download просто висит и чего ждёт, при этом файл у клиента создаётся, но в нём пусто. (Команды list, help, quit - работают нормально):

Сервер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class Program
    {
        static void Main(string[] args)
        {
            var localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            var listeningSocket = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);
            listeningSocket.Bind(localEndpoint);
            listeningSocket.Listen(1); 
            Console.WriteLine("\n Waiting for client...");
            var connectedSocket = listeningSocket.Accept();
            listeningSocket.Close();
            Console.WriteLine("\n Client: " + connectedSocket.RemoteEndPoint.ToString());
            string comand = "";         
            //string[] words = comand.Split(new char[] {' '});
            //string first = words[0];
 
            while (comand != "quit")
            {
                int bufferSize = 1024;
                var buffer = new byte[bufferSize];
                int requestSize = connectedSocket.Receive(buffer);
                comand = Encoding.UTF8.GetString(buffer, 0, requestSize);
                string response = ""; 
                
                if (comand == "help" || comand == "Help") response="\nComand list:\nquit - exit from programm\nlist - files list\ndownload 'filename' - download files";
                else if (comand == "list")
                {
                    response="\nFiles list from server:";
                    String mypath ="C:\\Users\\User\\Desktop\\server_files";
                    Directory
                        .GetFiles(mypath, "*", SearchOption.AllDirectories)
                        .ToList()
                        .ForEach(f => response +="\n"+ Path.GetFileName(f) + " - " + new FileInfo(f).Length + " byte") ;
                    response += "\n";
                }
                
                else if (comand=="download")
                {
                    
                    //string second = words[1];
                    int BufferSize = 1024;
                    var Buffer = new byte[BufferSize];
                    string f2 = "C:\\Users\\User\\Desktop\\server_files\\Course_info.txt";
                    int offset = 0, lastsize = BufferSize;
                    
                    using (FileStream sr = new FileStream(f2, FileMode.Open, FileAccess.Read))
                        while (sr.CanRead && lastsize > 0)
                        {
                            
                            lastsize = sr.Read(Buffer, offset, BufferSize);
                            connectedSocket.Send(Buffer, lastsize, SocketFlags.Partial);
                        } // using-while
                    response = "File is ready!";
                    
                }
                else response="This comand doesn`t exist";
                connectedSocket.Send(Encoding.UTF8.GetBytes(response));
            }
            connectedSocket.Close();
            
                        
        } 
    }
Клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Program
    {
        static void Main(string[] args)
        {
            var ownEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4321);
            var socket = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(ownEndpoint);
            Console.WriteLine("\n Trying to connect to server...");
            socket.Connect(IPAddress.Parse("127.0.0.1"), 1234);
            string comand = "";
            //string[] words = comand.Split(new char[] { ' ' });
            //string first = words[0];
            while (comand != "quit")
            {
                Console.Write("Comand: ");
                comand = Console.ReadLine();
                if (comand == "") { comand = "Help"; }
                var request = Encoding.ASCII.GetBytes(comand);
                socket.Send(request);
                int bufferSize = 1024;
                var buffer = new byte[bufferSize];
                int bytesReceived = socket.Receive(buffer); 
                var response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);
                if (comand == "download")
                {
                    string f2 = "C:\\Users\\User\\Desktop\\client_files\\Course_info.txt";
                    int BufferSize = 1024;
                    var Buffer = new byte[BufferSize];
                    int offset = 0;
                    int BytesReceived = socket.Receive(Buffer);
                    using (FileStream sw = new FileStream(f2, FileMode.Create, FileAccess.Write))
                        while (BytesReceived > 0)
                        {
 
                            sw.Write(Buffer, offset, BytesReceived);
                            BytesReceived = socket.Receive(Buffer);
                        }
                    Console.WriteLine("file recieved0");
                }
            }
            socket.Close();        
        }
    }
Помогите, пожалуйста, разобраться в чём проблема, ведь код в первой и во второй программе одинаковы. Но работает только в первой.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2018, 21:32
Ответы с готовыми решениями:

Клиент/сервер программа для передачи картинки из picturebox
Доброго времени суток, как реализовать клиент/сервер программу, которая будет передавать изображение из picturebox?

Реализовать клиент-серверный чат (консольная версия)
Реализовать клиент-серверный чат (консольная версия) со следующими возможностями: • При подключении к серверу клиент получает...

Первая консольная программа
всем спасибо !!!!! скоро закину первые разработки вам на оценку Добавлено через 39 минут мой первый опыт в написание using...

3
21.09.2018, 21:36

Не по теме:

А почему разделили все на 4 части? надо было весь код сплошным текстом выкладывать, разобрались бы

0
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
21.09.2018, 21:56  [ТС]
Рядовой, Потому что это 4 программы. Первые 2 программы (один сервер, а второй клиент) это один проект, последние 2 это второй проект. Я запускаю две консоли: в первой консоли запускаю сервер, а во второй консоли запускаю клиента. Поэтому и разделил на 2 части, чтобы было понятнее.

Добавлено через 6 минут
В первом проекте (2 первые программы) всё работает норм (файл копируется из папки сервера (server_files), и создаётся у клиента в папке(client_files)), а во втором проекте (2 последние программы) не работает тот же самый код (у клиента создаётся файл, а в нём пусто и + клиент висит в консоле). Вот в чём проблема.
0
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
22.09.2018, 21:40  [ТС]
Никто не знает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2018, 21:40
Помогаю со студенческими работами здесь

Консольная программа тестирования
Доброго дня суток. Я уже который раз пытаюсь получить хоть какие-либо навыки по программированию, однако так и не добился никаких...

Консольная программа в форму
Делаю проект. Но не могу переделать на форму, не получается. Возможно ли вообще сделать классы в формах? Или например как вытащить данные...

Консольная программа-тест
Доборого времени суток! Есть задача создать программу тест. Напишите универсальную программу тестирования. Тест, последовательность...

Зависает сервер при создании приложения типа клиент/сервер
Зависает сервер при создании приложения типа клиент/сервер using System; using System.Collections.Generic; using...

Как отправить json с клиента на сервер (клиент - прога на C#, сервер - файл PHP)
На хостинге есть файл php, как мне отправить к этому файлу json c помощью C# и как получить его с помощью php? А также как мне отправить,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru