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

Создание эхо-сервера

10.10.2018, 14:37. Показов 4361. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать эхо-сервер. Сервер должен слушать указанный TCP порт, транслировать данные из входящего соединения в исходящее.
В качестве проверки привести HTTP запрос браузера, посланный написанному серверу.
Сервер должен выдавать клиенту содержимое файловой системы. Корень сервера должен задаваться через параметры командной строки или через конфигурационный файл.
Заранее очень благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2018, 14:37
Ответы с готовыми решениями:

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

Создание COM сервера
Здравствуйте. Не могу правильно написать COM сервер на - делал по инструкции с msdn: using System; using...

Создание локального прокси сервера.
Всем привет. Писатель из меня никудышный. А в прочем, кому какое дело? Я бы сказал, что мне срочно нужна помощь??? А может? Что...

5
10.10.2018, 17:35

Не по теме:

Вопрос модераторам -- я имею право ставить в метках "сделайте за меня"? ^^

0
10.10.2018, 20:05

Не по теме:

Wolfdp, не надо так делать, пожалуйста.

0
 Аватар для Young Vu
133 / 103 / 43
Регистрация: 01.03.2018
Сообщений: 291
11.10.2018, 11:43
sma1le1, покажите наработки
0
0 / 0 / 0
Регистрация: 24.10.2016
Сообщений: 84
11.10.2018, 12:33  [ТС]
Young Vu,
Это сервер
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
 
namespace server
{
    class Program
    {
            static int port = 8005; // порт для приема входящих запросов
            static void Main(string[] args)
        {
                // получаем адреса для запуска сокета
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
 
                // создаем сокет
                Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    // связываем сокет с локальной точкой, по которой будем принимать данные
                    listenSocket.Bind(ipPoint);
 
                    // начинаем прослушивание
                    listenSocket.Listen(10);
 
                    Console.WriteLine("Сервер запущен. Ожидание подключений...");
 
                    while (true)
                    {
                        Socket handler = listenSocket.Accept();
                        // получаем сообщение
                        StringBuilder builder = new StringBuilder();
                        int bytes = 0; // количество полученных байтов
                        byte[] data = new byte[256]; // буфер для получаемых данных
 
                        do
                        {
                            bytes = handler.Receive(data);
                            builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                        }
                        while (handler.Available > 0);
 
                        Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
 
                        // отправляем ответ
                        string message = "ваше сообщение доставлено";
                        data = Encoding.Unicode.GetBytes(message);
                        handler.Send(data);
                        // закрываем сокет
                        handler.Shutdown(SocketShutdown.Both);
                        handler.Close();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
Это клиент
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
 
namespace lab_3_2
{
    class Program
    {
        // адрес и порт сервера, к которому будем подключаться
        static int port = 8005; // порт сервера
        static string address = "127.0.0.1"; // адрес сервера
        static void Main(string[] args)
        {
            try
            {
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
 
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                // подключаемся к удаленному хосту
                socket.Connect(ipPoint);
                Console.Write("Введите сообщение:");
                string message = Console.ReadLine();
                byte[] data = Encoding.Unicode.GetBytes(message);
                socket.Send(data);
 
                // получаем ответ
                data = new byte[256]; // буфер для ответа
                StringBuilder builder = new StringBuilder();
                int bytes = 0; // количество полученных байт
 
                do
                {
                    bytes = socket.Receive(data, data.Length, 0);
                    builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                }
                while (socket.Available > 0);
                Console.WriteLine("ответ сервера: " + builder.ToString());
 
                // закрываем сокет
                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }
}
Вот застрял теперь на том как сервер должен выдать клиенту содержимое файловой системы. Представляю так: корень сервера указан через конфигурационный файл. На клиенте ввожу "/ls" и после этого сервер должен отобразить содержимое каталога где лежит конфигурационный файл.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
11.10.2018, 14:37
Цитата Сообщение от sma1le1 Посмотреть сообщение
while (handler.Available > 0);
дни идут, ошибки не меняются (я про общий поток тем)... правильно

C#
1
2
3
4
5
6
7
do
                {
                    bytes = socket.Receive(data, data.Length, 0);
if(bytes > 0)
                    builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                }
                while (bytes > 0);
Цитата Сообщение от sma1le1 Посмотреть сообщение
Вот застрял теперь на том как сервер должен выдать клиенту содержимое файловой системы.
https://metanit.com/sharp/tutorial/5.2.php

по сути где-то так
C#
1
 socket.Send(Encoding.Unicode.GetBytes(string.Join("\n", Directory.GetDirectories("C:\"))));
учтите что приймете строку по частям, так что придется читать в MemoryStream, а только потом парсить в строку. Либо заюзать TCPClient, NetworkStream и вообще все обернуть в TextReader/Writer
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2018, 14:37
Помогаю со студенческими работами здесь

Создание TCP/UDP сервера
Добрый день, вечер, или другое время суток заставшее вас. Пытаюсь написать клиент-серверное приложение такого плана. что если запускается...

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

Создание собственного SOCKS4 прокси сервера
Всем привет. Необходимо создать прокси сервер (достаточно SOCKS4) на C#. Почитав википедию и просмотрев какие пакеты идут на SOCK4...

Создание асинхронного сервера на основе сокетов с пользователями
Давно курю эту тему... Смысл в том, что мне нужно написать асинхронный сервер на сокетах (System.Net.Sockets). Как это сделать я, в...

Создание сервера на основе SQL server database file
Здравствуйте, люди. У меня возникла проблема. Пишу первый проэкт с изпользованием SQL server и C#. Создал "SQL server database...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru