|
4 / 4 / 0
Регистрация: 06.11.2013
Сообщений: 18
|
||||||
TCP Client08.07.2019, 15:11. Показов 2898. Ответов 10
Метки нет (Все метки)
Здравствуйте.
Делаю приложение, в котором есть 3 события 1-ButtonInitClick-Инициализация 2-ButtonSendClick-отсылка сообщения 3-ButtonReadClick-чтение сообщения
Если сервер ни чего не отослал то происходит зависание на моменте чтения из буфера до момента пока сервер не отошлет хотя бы 1 байт. Как решить мою проблему? Краткое описание приложения: Приложение считывает данные с прибора у которого скорострельность маленькая и низкий приоритет насвязь и есть большая вероятность пропуска пакета. По этой причине в ответ на запрос может ни чего не прийти.
0
|
||||||
| 08.07.2019, 15:11 | |
|
Ответы с готовыми решениями:
10
TCP/IP пакеты. Как можно изменить служебные параметры заголовка TCP или UDP? как создать TCP клиент, TCP сервер ? На С++ C++ rtmp client |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 08.07.2019, 17:46 | ||
|
1
|
||
|
Любитель чаепитий
|
|||
| 09.07.2019, 06:22 | |||
select для блокирующего сокета может сыграть злую шутку: https://stackoverflow.com/ques... 34#5352634поэтому рекомендуется использовать неблокирующий сокет. но тут возникнет проблема с тем, что функция send может отправить меньше байтов, чем вы хотите и надо следить за этим.но это на выбор ТСа.
1
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 09.07.2019, 08:50 | ||
|
Однако, в отличие от неблокирующих сокетов, можно по-нажатию кнопки проверить при помощи ioctlsocket, что данные есть, а потом подождать пока придёт весь пакет, при помощи блокирующего recv
0
|
||
|
Любитель чаепитий
|
|||||
| 09.07.2019, 09:12 | |||||
man udp 7
кроме того, что через recv мы сразу и получим статус и прочитаем сообщение, если оно есть. P.S. если вы сейчас попытаетесь мне сказать, что неблокирующий recv не гарантирует того, что всё сообщение будет прочитано, то вспомните для начала, что tcp может вообще разбивать пакеты на однобайтовые и вы в любом случае по нажатию кнопки получите какой-нибудь огрызок данных. P.P.S. а вообще, я агитирую не за неблокирующие сокеты, а за select. про неблокирующие сокеты я сказал лишь потому, что у select'a там имеется как минимум одна проблема с блокирующими.
0
|
|||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
| 09.07.2019, 09:21 | ||||||
|
Добавлено через 1 минуту Добавлено через 59 секунд Добавлено через 1 минуту Добавлено через 59 секунд
0
|
||||||
|
Любитель чаепитий
|
|||||
| 09.07.2019, 09:42 | |||||
TCP и UDP на уровне сокетов?стандартная архитектура примерно такая: на самом низком уровне есть пул сокетов( SOCKET в винде и int в Unix), которые запихиваются в fdset, pollfd, kevent, etc.потом вызывается select, poll/WSAPoll, epoll, kevent, etc.если что-то заматчилось, то мы передаём об этом информацию в более высокоуровневую структуру, где до сих пор нет никаких разграничений на tcp/udp. там выделяется место(если ещё не выделено) для пришедшего сообщения. вот на этом моменте мы можем использовать ioctl с FIONREAD.потом все данные читаются и запихиваются в буфер. потом сигнал о том, что что-то было прочитано, передаётся юзеру этого глобального цикла. что вы предлагаете противопоставить такому подходу? разграничивать tcp и udp, чтобы 2 раза вызывать select, poll, etc?как думаете, как на вас сообщество посмотрит? это всё к слову о том, что у вас там что-то принято использовать, а у реального сообщества - нет. никто не использует FIONREAD до того, как стало ясно, что что-то уже пришло.Добавлено через 12 минут кнопку нажимает человек, который понятия не имеет, что там с сокетом. собственно, весь топик о том, чтобы при нажатии этой кнопки проверялось для начала, что что-то принято.
0
|
|||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 09.07.2019, 09:42 | |||
|
0
|
|||
|
Любитель чаепитий
|
||||
| 09.07.2019, 09:53 | ||||
|
существует ещё множество. и некоторые из них даже распространены. взять хоть Apache web-server, там всё блокирующее, т.к. на одно соединение порождается один процесс. и я, может, немного погорячился, сказав, что никто не использует. кто-нибудь обязательно использует. вы, например. Добавлено через 4 минуты select, poll, epoll, etc. когда стало известно, что уже что-то пришло.
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 09.07.2019, 09:54 | ||
|
Перед тем, как делать recv, я делаю FIONREAD, чтоб выделить буфер нужного размера (конечно, после select/poll, но, в данном случае, это не важно)
0
|
||
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
|
| 10.07.2019, 03:41 | |
|
oleg-m1973, GbaLog-, господа, вы обсуждаете урезанный функционал bsd интерфейса сокетов под винду, который был реализован лишь для более простого портирования туловин из nix мира. Микрософт специально давно уже придумала отличный интерфейс winsock2, с функциями WSA, где наиболее точно можно подобрать необходимую функцию для вызова. Все остальные рассуждения, как лучше использовать bsd socket под Windows - не более, чем попытки скрестить ежа с ужом.
XRinat, а по существу - после нажатия кнопки использовать select() с таймаутом, непример в 1 секунду, и если по таймауту ошибка - то ничего не получено.
0
|
|
| 10.07.2019, 03:41 | |
|
Помогаю со студенческими работами здесь
11
FTP client SMTP GMAIL Client Torrent client
TCP-client and TCP-Server Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|