28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
||||||
1 | ||||||
Проверка сокета08.04.2014, 17:02. Показов 11070. Ответов 35
Метки нет (Все метки)
Как можно проверить сокет,тоесть соеденение его,
вот так я проверяю
Добавлено через 19 минут подскажите варианты как можно проверять связь сокета клиента и сервера?а то я уже перепробывал почти все варианты
0
|
08.04.2014, 17:02 | |
Ответы с готовыми решениями:
35
Считать данные с сокета в массив Создание сокета по адресу 192.168 Чтение сокета в одном потоке, обработка в другом Winsock. Почему в приведенном коде не работает создание сокета? |
Ушел с форума
|
||||||
08.04.2014, 23:25 | 21 | |||||
Клиент:
должен, видимо, дескриптор сокета...
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
08.04.2014, 23:27 [ТС] | 22 |
Убежденный, тут все нормально я посылаю просто в поток функцию без параметров это клиент,он просто читает в цикле данные бесконечном,отделил в поток что бы окно реагировала на другие действия
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.04.2014, 23:27 | 23 |
sergeu90, сейчас осталась проблема в работе ThreadPool?
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
||||||
08.04.2014, 23:30 [ТС] | 24 | |||||
DrOffset, проблема только и была в ThreadPool он не правильно работает если ему выставить максимальное количество потоков
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
08.04.2014, 23:46 | 25 |
Не заметил видимых проблем в работе. Выставил максимальное количество потоков 5 и запустил два клиента. Сервер увидел обоих и успешно обоих отсоединил при закрытии. В твоем коде есть проблемы, но они носят второстепенный характер. Поэтому я пока не буду заострять на них внимание.
Короче, можешь подробнее описать в чем проблема и как мне ее воспроизвести?
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
08.04.2014, 23:54 [ТС] | 26 |
DrOffset, сделай максимальное количество поток 2 и подсоедени 4 клиента,должно что 2 клиента будут работать,а 2 буду в очереди,потом закрой клиента одного из них,подсоеденится еще один клиент который ждал и один будет еще ждать,потом отсоедени еще одного клиента и по идеи должен был заработать тот который в очереди был,но управление возвращается опять тому же который занял перед этим
Добавлено через 1 минуту DrOffset, тоесть как будто в очереди который был он не занинимает потом поток,а должен был ща приведу скриншот как работает
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 00:01 [ТС] | 27 |
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 00:35 [ТС] | 28 |
первая картинка 4 клиента,2 из них работают 2 ожидают,
вторая картинка завершил 1 клиента другой получил свой поток и уже может работать третия картинка завершил еще 1 клиента а тот который должен был заработать не заработал,а вернуло сообщение опять тому который на 2 картинке получил управление,тоесть тот из очереди как будто ушел куда то Добавлено через 32 минуты DrOffset, я думал это может так происходит из за recvв функции потока?может она что то делает не то
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|||||||||||
09.04.2014, 00:37 | 29 | ||||||||||
Сообщение было отмечено sergeu90 как решение
Решение
sergeu90, в общем все понятно, разобрался в чем дело.
Ты зря отдаешь по адресу сокет в поток, нужно копировать. Это на время получается разделяемый ресурс, который перезатирается на очередной итерации подключения и поток цепляется к уже существующему соединению. Я сделал вот так и все заработало.
По хорошему это надо переделать через очередь событий и синхронизировать только ее. Тогда и сокет для работы можно через событие передать и данные другие. Поток начала работу, достал из очереди событие и начал его обрабатывать. В список клиентов добавлять в основном потоке, удалять тоже. Добавлять при старте обработки, удалять по завершению. Как-то так.
1
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 00:40 [ТС] | 30 |
DrOffset, у меня теперь ругается на функцию SOCKET socket = *((SOCKET *)clientSocket);если поменял как вы work = CreateThreadpoolWork(ServeClient, (void*)clientSocket,&CallBackEnviron);
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
||||||
09.04.2014, 00:41 | 31 | |||||
sergeu90, да, забыл. там тоже надо менять:
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 00:45 [ТС] | 32 |
DrOffset, все разобрался большое спасибо)))а насчет разделяемых ресурсов сделал через критическую секцию
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
09.04.2014, 00:46 | 33 |
sergeu90, теперь поведение какое требуется?
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 00:54 [ТС] | 34 |
DrOffset, да))как вы дошли до этого?как вы узнали в чем именно проблема?
0
|
DrOffset
|
09.04.2014, 01:03
#35
|
Не по теме: sergeu90, просто исправлял все потенциально опасные места :) Добавил синхронизацию, проверки ошибок после вызовов, ну и это тоже на глаза попалось. Оно на поверхности на самом деле. Т.е. невооруженным глазом понятно, что так делать нельзя. Осталось только удостовериться, что причина именно озвученной проблемы была в этом. Пара прогонов для проверки и сюда пост написал.
0
|
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
|
|
09.04.2014, 01:05 [ТС] | 36 |
DrOffset, спасибо,убил два дня на это,но стоило того что бы разобраться теперь понимаю
0
|
09.04.2014, 01:05 | |
09.04.2014, 01:05 | |
Помогаю со студенческими работами здесь
36
Проверка сокета на коннект Проверка сокета на подключение Проверка сокета на наличие дефектов Копирование сокета или передача сокета в функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |