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

серверное приложение, сокеты

16.08.2011, 21:39. Показов 1017. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Есть код простого серверного приложения:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
using System.Net;
using System.Threading;
 
namespace serv
{
    class Program
    {
        public static Socket serv;
        static void Main(string[] args)
        {
        //настраивает сокет
            serv = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // задаем ip адреса и порт
            IPEndPoint point = new IPEndPoint(IPAddress.Any, 777);
            serv.Bind(point);
            Console.WriteLine("777 is waitng for u");
            serv.Listen(10);
            //запускаем обработчик входящих-исходящих данных
            Server();
            
        }
 
 
        static void Server()
        {
            
            while (true)
            {
 
                Socket handle = serv.Accept();
                string data = null;
 
                while (true)
                {
                //если клиент приконнектился - пишем приветствие
                    Console.WriteLine("Client connected");
                            handle.Send(System.Text.Encoding.Default.GetBytes("Hello!"));
 
                    while (true)
                    {
                    
                        try
                        {
                            byte[] bytes = new byte[1024];
                            int i = handle.Receive(bytes);
                            data = System.Text.Encoding.Default.GetString(bytes, 0, i);//полученная строка
                            if (data.Length == 0)
                            {
                                handle.Send(System.Text.Encoding.Default.GetBytes(""));                                
                            }
                            //в цикле переделываем входящую строку в верхний регистр
                            else
                            {
                                Console.WriteLine("Text rec.: {0}", data);
                                data = data.ToUpper();//<==
                                //..и отсылаем обратно в клиент
                                handle.Send(System.Text.Encoding.Default.GetBytes(data));
                                if (data == "terminate_client_connection")
                                {
                                    break;
                                }
                            }
                        }
                        catch
                        {
                            break;
                        }
 
                    }
 
                    break;
                }
                handle.Shutdown(SocketShutdown.Both);
                handle.Close();
                Console.WriteLine("Client disconnected");
 
            }
        }
    }
}
как сделать так, чтобы к серверу могло подключаться n-ное количествое клиентов? пробовал
C#
1
2
Thread t1 = new Thread(new ThreadStart(Server));
t1.Start();
- но ничего не выходит.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2011, 21:39
Ответы с готовыми решениями:

Серверное приложение и бд
Нужен совет опытных. Вопрос заключается в том, какую лучше всего бд выбрать для серверного приложения, написанного на C#? На данный...

Серверное приложение
http://professorweb.ru/my/csharp/web/level3/3_2.php Разбираю пример по ссылке клиент-серверного приложения. Понимания пока мало ....

клиент-серверное приложение
собственно проблема заключается в том, что при запуске клиента, и нажатии на кнопку (отправление сообщения серверу) клиент...

8
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.08.2011, 21:54
C#
1
Socket handle = serv.Accept();
после этой строки весь код лучше запускать в отдельном потоке
0
 Аватар для maks_IQ
21 / 21 / 1
Регистрация: 05.01.2011
Сообщений: 173
16.08.2011, 22:02  [ТС]
Eugene22, а чуток поподробнее можно? а то что-то не получается =(
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.08.2011, 22:11
В процедуре Main запускаете новый поток -
C#
1
2
Thread t1 = new Thread(new ThreadStart(Server));
t1.Start();
в Server
C#
1
2
3
4
5
6
7
8
9
10
11
static void Server()
        {
            
            while (true)
            {
 
                Socket handle = serv.Accept();
Thread t1 = new Thread(new ThreadStart(subServer));
t1.Start();
}
}
И в процедуре subServer начиная со строки
C#
1
string data = null;
все остальное.

Ну я просто предложил как вариант, как мне кажется, лучше сделать
1
 Аватар для maks_IQ
21 / 21 / 1
Регистрация: 05.01.2011
Сообщений: 173
16.08.2011, 22:22  [ТС]
Eugene22, да, так работает.

П.С. вначале subServer дописал
C#
1
Socket socket_1 = handle;
чтобы при закрытии одного клиента не вылетали остальные.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.08.2011, 22:31
maks_IQ, сокет клиента можно передавать в subServer в качестве параметра и там же в subServer закрывать
0
 Аватар для maks_IQ
21 / 21 / 1
Регистрация: 05.01.2011
Сообщений: 173
16.08.2011, 22:34  [ТС]
Eugene22, а как передавать? если использовать ParameterizedThreadStart, разве не нужно чтобы в параметрах subServer был тип Object?.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.08.2011, 22:39
кажется так
C#
1
t1.Start(mySocket)
- и тогда
C#
1
subServer(Socket mySocket)
- но не уверен,так как с бейсика пример взял
0
 Аватар для maks_IQ
21 / 21 / 1
Регистрация: 05.01.2011
Сообщений: 173
16.08.2011, 22:45  [ТС]
Eugene22,
C#
1
2
Thread sub = new Thread(new ThreadStart(SubServ));
                sub.Start(handle);
так не хочет работать, выдает ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2011, 22:45
Помогаю со студенческими работами здесь

Клиент-серверное приложение
Заинтересовался написанием клиент-серверных приложений, с чего начать? что написать? есть ли какая-либо литература (желательно электронная)...

Клиент-серверное приложение
Клиент-серверное приложение между процессов с помощью именованых каналов Здравствуйте. Тут ахтунг, короч. Не то, чтобы я гуру в этом...

Закрывается клиент-серверное приложение
Здравствуйте, делаю что то типа клиен-сервера. Использую сокеты. При подключении с клиента на сервер (Виндовс Формс). Он иногда закрывается...

Асинхронное клиент серверное приложение
Всем доброго времени суток, а так же спасибо всем кто загляну и не прошёл мимо. Сразу предупреждаю, вопросов от меня будет много, но все...

Как организовать клиент-серверное приложение
Делаю лабораторную: необходимо написать три приложения на с#, два сервера (ServerInput и ServerProcess) и клиент-приложение (ClientOutput)....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru