Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6

Поток не хочет стартовать (метод для прослушивания подключений к серверу)

10.03.2012, 21:59. Показов 1066. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираюсь в потоках и сокетах. Почему то поток не хочет стартовать метод для прослушивания подключений к серверу, посмотрите что не так.
Код:
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
100
101
102
103
104
105
106
107
108
109
110
111
112
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Generic;
 
public class TcpServer
{
    private Socket MainSocket = null;
    private IPEndPoint Ip_point = null;
    private IPAddress IP = null;
    private Int32 port = 0;
    private List<Thread> Threads = null;
    private delegate void ThreadingDelegate();
    private short Count;
    private int max_Count;
 
    struct client
    {
        public Socket ClientSocket;
        public IPEndPoint Ip;
        public client(IPEndPoint ip)
        {
            ClientSocket = null;
            Ip = ip;
        }
 
    }
 
    public TcpServer(string ip, int port, int Max)
    {
        IP = IPAddress.Parse(ip);
        this.port = port;
        Ip_point = new IPEndPoint(IP, this.port);
        MainSocket = new Socket(IP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        MainSocket.Bind(Ip_point);
        MainSocket.Listen(Max);
        Count = 0;
    }
    //~TcpServer()
    //{
    //    foreach (Thread t in Threads)
    //    {
    //        t.Abort();
    //        Console.WriteLine("Поток {0} завершен", t.Name);
    //    }
    //    MainSocket.Dispose();
    //}
 
    public void Start(int maxCon)
    {
        max_Count = maxCon;
        Threads = new List<Thread>();
        for (int i = 0; i < max_Count; i++)
        {
            Thread ThreadToListen = new Thread(new ThreadStart(new ThreadingDelegate(StartListening)));
            ThreadToListen.IsBackground = true;
            ThreadToListen.Start();
            Threads.Add(ThreadToListen);
 
        }
    }
 
    public void Dispose()
    {
        foreach (Thread t in Threads)
        {
            t.Abort();
        }
        MainSocket.Dispose();
    }
 
    private void StartListening()
    {
        while (true)
        {
            try
            {
                Console.WriteLine("Поток запущен...");
                client client = new client();
                if (Count < max_Count)
                {
                    using (client.ClientSocket = MainSocket.Accept())
                    {
                        Console.WriteLine("Пользоватеь подключился");
                        client.Ip = (IPEndPoint)client.ClientSocket.RemoteEndPoint;
                        Count++;
                    }
                }
                else
                    Thread.Sleep(5000);
            }
            catch (SocketException e)
            {
                //обработка ошибки при подключении
                Console.WriteLine("Ошибка подключения: {0}", e);
            }
        }
    }
    
 
}
 
class MyTcpListener
{
    public static void Main()
    {
        TcpServer Sr = new TcpServer("192.168.1.3", 12000, 1);
        Sr.Start(1);
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2012, 21:59
Ответы с готовыми решениями:

Метод для прослушивания изменения текста EditText
Подскажите, пожалуйста, как называется метод для прослушивания изменения текста в EditText и метод для прослушивания того, что любой view в...

Какой метод для прослушивания клика по строке jtable использовать?
Скажите правильно я понял с помощью данной конструкции можно прослушать двойной клик мыши по строке таблицы? Я не совсем понимаю что...

ALiveNF6P-VSTA не хочет стартовать
Всем доброго времени суток. Попала мне в руки материнка от асрково ALiveNF6P-VSTA, попробовал ее запустить, но она всячески отказывает...

5
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
11.03.2012, 01:20
Здесь не стартует?
C#
1
2
3
Thread ThreadToListen = new Thread(new ThreadStart(new ThreadingDelegate(StartListening)));
ThreadToListen.IsBackground = true;
ThreadToListen.Start();
Не знаю в чём проблема, но попробуйте написать вместо:
C#
1
Thread ThreadToListen = new Thread(new ThreadStart(new ThreadingDelegate(StartListening)));
Следующее:
C#
1
Thread ThreadToListen = new Thread(StartListening);
Или:
C#
1
Thread ThreadToListen = new Thread(delegate(){StartListening();});
Вообще, это эквивалентно, должно быть, но раз не запускается...
И... Пользуйтесь отладчиком: точками останова, окнами "Локальные переменные" и подобными для устранения ошибок.
1
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
11.03.2012, 01:23  [ТС]
Цитата Сообщение от FutureCome Посмотреть сообщение
ThreadToListen.IsBackground = true;
спасибо, разобрался. Из-за этого свойства поток сразу завершался.
0
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
11.03.2012, 02:12
А... Ну, да. Это всё зависит от того, как используется ваш класс извне...
Thread.IsBackground:
Поток является либо фоновым, либо основным. Фоновые потоки идентичны основным за тем исключением, что фоновые потоки не предотвращают завершение процесса. Поскольку все основные потоки, принадлежащие процессу, завершились, общеязыковая среда выполнения завершает процесс. Все оставшиеся фоновые потоки останавливаются и не завершаются.
Т.е. Программа не закроется, пока все основные потоки не закончат работу. Закончили ли работу фоновые - не важно, программа всё равно прекратит свою работу, остановив их.
1
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
11.03.2012, 02:14  [ТС]
FutureCome, тогда не понимаю тоже в чем проблема была, но убрав свойство все заработало как надо.
0
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
11.03.2012, 02:30
Видимо программа у тебя запускала этот поток и больше ничего не делала - подходила к концу main(). А раз main() закончился - программа закрывается. Программа закрывается - завершает фоновые потоки, вот она его и останавливает тут же после запуска...
А теперь, раз это основной поток, программа (точнее не программа, а главный основной поток) вынуждена ждать, пока он сам завершит работу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2012, 02:30
Помогаю со студенческими работами здесь

Toshiba qosmio x300-15r, LA4471P - не хочет стартовать с кнопки.
....имеет внутри маман LA4471P -которая не хочет стартовать с кнопки... нашелся в хламе файлик с описанием процедуры проверки...

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

Как создать список подключений к серверу?
Здравствуйте! Я создал чат с помощью ServerSocket и ClientSocket и хочу добавить на сервер чата список подключений(клиентов), чтобы они...

Как подсчитать количество подключений к серверу?
Как подсчитать количество подключений к серверу? помогите пожалуйста) using System; using System.Net; using System.Net.Sockets; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
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 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru