Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109

Поделитесь исходниками клиент сервера

02.07.2018, 15:25. Показов 1516. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сабж.. Буду благодарен если кто нибудь выложит в качестве примера исходники нормального рабочего клиент сервера, 2 - 3 уровневые, с интерфейсами или без, вообщем любые. Просто нужно посмотреть как по человечески это выглядит изнутри, к тем что на MSDN у меня есть вопросы, которые понимаю как решить но осуществить не получается даже с литром.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2018, 15:25
Ответы с готовыми решениями:

Клиент для UDP сервера!
Есть вот такой сервер: using System; using System.Collections.Generic; using System.Linq; using System.Net; using...

Socket - реализация клиент-сервера
если честно, никогда не задавался целью, как на .Net реализовать клиент-сервер, но вот приперло, а как сделать, не понимаю вообщем-то ...

Решение для клиент-сервера
Как это реализовать?) Сервер: Принимает текст от множества клиентов, считывает его первое слово(login\register\cd), после чего...

9
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
02.07.2018, 16:16
WCF, просто сокеты, SignalR, WebAPI?
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
02.07.2018, 20:56  [ТС]
просто сокеты, я начал делать на листенере, как в примере с хабра Многопоточный сервер на C# за 15 минут. а вообще без разницы, проект пока на ноле... я знаю как реализовать все но почему то не могу корректно завершить работу листенера, главный косяк, может мне уже легче взять готовый чей нибудь проект, подогнать в него свои классы для хранения, передачи файлов, и прочее и успокоиться. спасибо
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.07.2018, 06:38
deadmask, зайдем из далека -- что должна делать программа? Сокеты/SignalR используются для постоянного соединения и моментального отклика как клиента, так и сервера без участия противоположной стороны. WCF/WebApi/REST более подходят для принципа "запрос-ответ" и по сути напоминают работу через браузер. Постоянное соединение с сервером через них, насколько помню, тоже возможно, но это отдельная история и со своими приколами.

Еще такие моменты:
- на чистых сокетах придется транспортную обертку ваять самому. В этом случае можно либо велосипедить тот же json, либо вообще перейти к мега абстрактной бинарной сериализации и работать тупо как с потоком обьектов (правда сервер резко станет зависим от вашей сборки). Плюс, можно заюзать пакетный UDP, если скорость критична
- SignalR мощная обертка над web-socket/event-source/http, можно использовать как на десктопе, так и на браузере. Также по сути являет кросс-платформеной фичей, т.е. сервер можно написать на C#, предоставить json-контракт, а клиентов писать на чем-угодно. Ну, ради прикола могу привести єто https://www.cyberforum.ru/post12310844.html
- WCF по сути предоставляет удаленые методы. Т.е. в своем клиенте вы условно "подключаетесь к dll по сети". Хотя там есть возможноть и уставноки соединия и тоже очень мощная штука. Ну и как пример https://www.cyberforum.ru/post12281961.html , хотя там ужасная подгонка конфигов через код. Лучше просто почитайте про технологию https://msdn.microsoft.com/ru-... 07578.aspx
- WepApi по сути доже удаленые методы, но как я понял, не являются REST, т.е. подключить через референсы не получится. С другой стороны их можно спокойно юзать с того же браузера, или мобильного приложения т.к. по сути это просто http.

Вообще примеров в сети навалом, няпример
Консольный TCP-чат
SignalR в помощь, или как оживить web

Вообще, лучше пройтись по msdn или metanit и почитать про технологии, там не на 15 минут материала.

Цитата Сообщение от deadmask Посмотреть сообщение
может мне уже легче взять готовый чей нибудь проект, подогнать в него свои классы для хранения
Нет, определитесь что вам нужно реализовать, и возьмите одну из технологий на вооружение. Придется потратить неделю-другую на разбор, но зато потом будете тупо заниматся разработкой, а не велосипедированием.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.07.2018, 09:28
Wolfdp, коллега, вы еще забыли упомянуть о такой технологии, как ASP.NET Core. На мой взгляд, очень интересная штука. Основное что мне нравится-полностью управляемый конвейер HTTP, который можно сконфигурировать по своему желанию.
deadmask, что касается вашей просьбы, то вам, прежде чем писать код, нужно определиться, что программа должна делать (полностью абстрактно), а уже потом, исходя из требований ТЗ, выбирать наиболее подходящую технологию.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.07.2018, 09:56
insite2012, думаю, если бы ТС-у нужен был сайт, он сразу бы об этом сказал. А вообще да -- web-api наверное лучше хостить на core, т.к. меньше зависимостей от IIS/платформы.
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
03.07.2018, 10:38  [ТС]
Вобщем суть в изобретении велосипеда... можно настроить все тоже самое на АД но хочется в виде сервиса. Приложение для горячего резервирования данных (пользовыатель создает документ на диске - сервис его подбирает и отправляет на сервер, а сервер упаковывает и создает цепочку версий) клиент конектится к серверу и ждет без отключения, как появилась задача начинается передача файлов. Общение можно написать при помощи сериализации и передачи туда сюда классов с командой и тд

Добавлено через 23 минуты
я не могу корректно остановить листенер. он не обрывает поток даже если я аборчу его сам.
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public void Stop()
        {
            if (Listener != null)
            {
                cancellationToken.Cancel(); // этим я разрываю цикл while (true)
                for (int i = 0; i > ThreadList.Count; i++)
                ThreadList[i].Abort();
                Listener.Stop();
                Log.Write("Сервер остановлен", Log.MsgTypes.Info);
               
            }
        }
чую что я все вообще перепутал и смешал то что смешивать нельзя, потом начал читать про чистые сокеты без листенера
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
21.07.2018, 14:24  [ТС]
Вот что удалось написать, Работает но кривовато, помогите исправить косяки
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  public class Server
    {
        public int DefaultPort = 5555; 
        public Log Log = new Log() { LogName = "Server Core v.1.0" };
        Settings Settings = new Settings();
        List<ClientInfo> ClientList = new List<ClientInfo>();
 
 
        ///////////////////////////////////////
        public delegate void ServerStatus(object sender, TServerEvent e);
        public event ServerStatus OnConnect;
        public event ServerStatus OnDisconnect;
        public event ServerStatus OnStart;
        public event ServerStatus OnStop;
        ///////////////////////////////////////
 
        Socket MainListener;
        private bool runed;
        public void Start()
        {
            runed = true;
            Start(DefaultPort);
        }
 
        public void Start(int i)
        {
            runed = true;
            Settings.Load();
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(Settings.IP), int.Parse(Settings.Port));
            MainListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            MainListener.Bind(ipEndPoint);
            MainListener.Listen(0);
            Task T = new Task(()=>WaitClients(MainListener));
            T.Start();          
            Log.Write("Сервер запущен" , Log.MsgTypes.Info);         
            OnStart?.Invoke(this, new TServerEvent() { Status = Log.LastRecord_ });
            ClientList.Add(new ClientInfo() { socket = MainListener, task = T });
        }
 
        private void WaitClients(Socket sListener)
        {
            while (true)
            {
                if (!runed) break;
                Socket Client = sListener.Accept();
                    Log.Write("Клиент " + ((IPEndPoint)(Client.RemoteEndPoint)).Address.ToString() + " подключен", Log.MsgTypes.Info);
                    OnConnect?.Invoke(this, new TServerEvent() { Status = Log.LastRecord_ });
                    Task T = new Task(() => ReadClientStream(Client));
                    T.Start();
                    ClientList.Add(new ClientInfo() { socket = Client, task = T }); 
            }
        }
 
        private void ReadClientStream(Socket client)
        {
            while (true)
                if (!client.IsConnected())
                {
                    Log.Write("Клиент " + ((IPEndPoint)(client.RemoteEndPoint)).Address.ToString() + " отключен", Log.MsgTypes.Info);
                    OnDisconnect?.Invoke(this, new TServerEvent() { Status = Log.LastRecord_ });
                    CloseConnection(client);
                    break;
                }
                else
                {
                  // Прием датаграммы и попытка ее распарсить
                }
 
        }
 
        public void Stop()
        {  Log.Write("Сервер остановлен", Log.MsgTypes.Info);
            OnStop?.Invoke(this, new TServerEvent() { Status = Log.LastRecord_ });
            foreach (ClientInfo s in ClientList)
                CloseConnection(s.socket);
            CloseConnection(MainListener);
 
 
 
        }
        void CloseConnection(Socket socket)
        {
            byte[] b = new byte[1024];
            try
            {
                int read = 0;
                while ((read = socket.Receive(b,SocketFlags.None)) > 0)
                { }
                Log.Write("Клиент " + ((IPEndPoint)(socket.RemoteEndPoint)).Address.ToString() + " отключен", Log.MsgTypes.Info);
 
            }
            catch
            {            
            }
            socket.Close();
         
        }
   
    }

я незнаю как правильно завершить работу сервера... если остановить, то возникает ошибка WSACancelBlockingCall на Socket Client = sListener.Accept();

Добавлено через 1 час 4 минуты
Посоветуйте что нибудь кроме как обернуть в эксепшн Socket Client = sListener.Accept();
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.07.2018, 17:42
Помнится мне когда-то давно попадался фреймворк-обертка над сокетами. Возможно, что сейчас я нагуглил именно его:
http://www.supersocket.net
Примеры использования: https://csharp.hotexamples.com... mples.html
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
21.07.2018, 18:15
Цитата Сообщение от Wolfdp Посмотреть сообщение
Постоянное соединение с сервером через них, насколько помню, тоже возможно
Через WCF точно возможно. И без приколов)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2018, 18:15
Помогаю со студенческими работами здесь

Нужен пример клиент-сервера
Нужно сделать Сервер-Клиент, что он должен делать? 1)когда заходишь в клиент(вин форм) к серверу идет запрос и отправляет mac адресс...

Наставления в разработке клиент сервера
Добрый день. Пишу небольшой сервер - клиент для локальной сети, функционал планирую добавлять по необходимости. Выкладываю код в надежде...

Нужен пример клиент-сервера
Подскажите как в visual basic 2010 написать приложение типа клиент-сервер для работы одного сервера с несколькими клиентами (какие...

Клиент/сервер зависание сервера
Приветствую всех. Недавно начал изучать C# .NET да и вообще C#. На данный момент пишу что-то типо ICQ. Сделал регистрацию и вход, но...

Зависает клиент при приёме от сервера
С начало сделал посыл данных только от клиента серверу..там всё хорошо далее начал делать обратный, от сервера вроде как всё хорошо...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru