|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
||||||
Socket.BeginConnect и чтение/запись данных - проверка кода13.09.2012, 13:42. Показов 9227. Ответов 71
Метки нет (Все метки)
Данные поступают я их вывожу в контролы.Также хотелось бы реализовать запись данных в файл и одновременное чтение в другом месте.как мне это реализовать без "Задержки данных" ибо мы используем асинхронный коннект. Также хотелось бы спросить у ГУРУ у меня "правильная логика" полученния данных вывод и всего остального? Добавлено через 40 минут И ещё если убрать комментарии возле Chart'a то видно не вооруженным глазом что данные "запаздывают" в Textbox'e я вижу только один путь исправления. "оптимизировать" Chart т.е. выводить только текущие значения(пакеты который только что пришли и прошлый пакет вырисовывать, а не все что бы график не выравнивался и не "скручивался"), но даже он не даст "точных" текущих значений на клиете(они не будут совпадать на сервере) как вывесте текущее значения в Chart??или как вылечить болезнь с "запаздыванием" данных если она вообще решается на моё примере(т.к. используем асинхронный коннект)
0
|
||||||
| 13.09.2012, 13:42 | |
|
Ответы с готовыми решениями:
71
как передать начальные данные в Socket.BeginConnect Реализовать чтение данных ИБП Ippon через serial socket Чтение файла, чтение названия папки где находится файл, запись данных на PHP |
| 13.09.2012, 14:04 | ||
|
Добавлено через 5 минут И кстати, ты всего лишь делаешь асинхронное подключение, а прием\чтение данных синхронно. Если уж делать асинхронный клиент, то делай его полностью а не частично асинхронным.
0
|
||
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 14:07 [ТС] | |
|
т.е. получается у меня будет поток(main) в потоке(socket.BeginConnect) в потоке1(read) и в потоке2(write)?
Добавлено через 2 минуты Спасибо за помощь.почему надо делать всё асинхронно?
0
|
|
| 13.09.2012, 14:21 | ||
|
Ты сам понял что сказал?) поток может быть либо основным либо фоновым, поток в потоке не содержится. Потоки позволяют распараллелить задачи на одновременное выполнение.
Во общих чертах, начни с того, чтобы твой код был оптимален а не все вызывалось в callback'е подключения. Создай дополнительные методы с названиями SendData, ReceiveData, для них создай callback'и. Далее создай отдельный метод для записи в файл, на подобии using (StreamWriter sw = new StreamWriter(new Filestream......) И добавь в callback приема или отправки вызов соответствующего метода для записи данных в файл. А теперь по поводу одновременного чтения. Когда клиент подключится запусти новый поток. В нем организуй бесконечный цикл. В цикле проверяй какую-нибудь переменную, а лучше очередь организовать и проверять если что-то поступили в очередь то прочитать эти данные. Естественно добавлять данные в очередь будет после их приема. Хотя я не совсем понимаю, что ыт подразумеваешь под чтением в другом месте, чтение чего? место? Добавлено через 3 минуты
1
|
||
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 14:24 [ТС] | |
|
спасибо что то я бред написал)..чтения тех же данных что и записал в файл
..зачем=( сам не знаю..место при вызова события нажатия кнопкиДобавлено через 2 минуты Цель была в том что бы получать данные и выводить в контролл.я делал чз Thread -> TcpClien и NetworkStream и сразу выводил в контролы..но данные "то приходили то приходило слишком много" мне подсказали делай всё чз асинхронное коннект чз сокет.. я так и сделал и данные стали выводится без всяких проблем.
0
|
|
| 13.09.2012, 14:33 | ||
|
TcpClient это уже готовые методы для создания клиент серверных приложений. Конечно лучше использовать класс Socket, более гибкий. Асинхронные сокеты используются для программ с большим количество подключений и т.п. Суть в них такая: тебе не надо выделять потоки под все действия сокетов, они создаются сами. Но под твои нужды вполне сойдет обычный синхронный клиент. Просто используй не BeginConnect, а просто Connect. Синхронные сокеты намного легче в изучении. Поищи мои темы, я не один раз задавал вопросы про клиент серверные приложения, там где-то есть хорошие примеры,, которые покажут тебе как должно выглядеть правильно клиент-серверное приложение. Ну и конечно же в msdn есть примеры. Удачи )
0
|
||
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 14:42 [ТС] | |
|
Было бы так просто если данных не 8000 в секунду , а сервер на Ansi-c(B&r микроконтроллер real-time ) не получилось у меня чз Thread-> socket_connect =(
Добавлено через 7 минут Было предложение считывать данные в Очередь или в список или в "УправляемыйСписок" и после уже юзать их стоит это того?выйгрышь будет по времени??
0
|
|
| 13.09.2012, 14:54 | |
|
Лучше в очередь, список придется ковырять постоянно, и он будет увеличиваться, а у вас условие что нужно прочесть только что пришедшие данные. Не вижу проблем со временем, данные поступили, вы их тут же отобразили. Конечно если у вас сервер не на другом континенте Земли.
0
|
|
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
||||||
| 13.09.2012, 14:54 [ТС] | ||||||
0
|
||||||
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 15:02 [ТС] | |
|
Делал чз Socket.Connect данные проскакивают.=( т.е. идут у меня микросекунды и 20% данных не выводится
Добавлено через 48 секунд переданных да, а принятых не всегда так..если чз асинхронный сокет то всё верно..если как то подругому то нет..думаю это связанно из за Invoke
0
|
|
| 13.09.2012, 15:18 | |
|
Попробуй написать консольный вариант клиента и в консоли смотри какие данные приходят, а лучше пиши все в файл и проверяй корректность. Тут ещё огромную роль играет сам сервер, на каком языке он написан?
1
|
|
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 15:27 [ТС] | |
|
я его писал язык похож на Чисты Си но с какой то примесью (ANSI-C) сервер написан корректно проверянно на клиенте написанный делфи
Добавлено через 4 минуты В файл писал чз BeginConnect и всё нормально. я "правильно" сделаю если напишу асинхронный коннект а выводить буду всё синхронно в TextBox, TextBox,TextBox, Chart,Chart?как же тогда выводить в Chart если я вывожу его чз Invoke то видно что данные запазывают в TextBox'e?
0
|
|
| 13.09.2012, 15:27 | |
|
Ну, в таком случае проверяй пока что на консоли, данные не могут теряться, если только ты раньше времени не заканчиваешь прием. Пробуй без форматирования, т.е. принял строку, записал в переменную и отобразил, думаю разберешься)
0
|
|
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 15:29 [ТС] | |
|
а как мне поступить с Chart'ом?
0
|
|
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 15:33 [ТС] | |
|
Но тут Соль в том что данные могут приходить по две недели или даже по три недели..данные всё идут и идут.и есть кнопка дисконнекта..но если не создавать поток то форма же виснет=(.
0
|
|
| 13.09.2012, 15:38 | |
|
Как на счет использования событий? отдельно опишешь класс клиента, отдельно класс события. После при приему данных будешь сигнализировать о том, что произошло событие. И последнее, на самой форме сделаешь обработчик события, в который и засунешь invoke ? По идеи не должно будет ни запаздывать, ни тормозить.
1
|
|
|
7 / 7 / 2
Регистрация: 20.04.2011
Сообщений: 163
|
|
| 13.09.2012, 15:43 [ТС] | |
|
если я тебя понял то ты предлагаешь делать создать Thread в него подавать ThreadStart(Client)
А обработчик события подключения писать на форме?если не правильно понял..то пожалуйста по подробнее про события
0
|
|
| 13.09.2012, 15:52 | |||||||||||
|
Создаешь класс для обработки события, обычно это класс унаследованный от EventArgs, в котором содержатся переменные, нужные тебе(например айпи адрес отправителя, количество принятый данных и т.п.) и делаешь там просто конструктор на инициализацию этих данных. Далее в коде клиента созда делег для события, и метод для заполнения данными этого события. Далее в форме останется объявить это события для класса клиента и реализовать его.
Пример как создать события:
1
|
|||||||||||
| 13.09.2012, 15:52 | |
|
Помогаю со студенческими работами здесь
20
Чтение/запись hex кода файла Проверка прав доступа (чтение/запись) в директории Open/Save Dialog. Сериализация данных. Запись/чтение данных объектов в/из потока.
Чтение и запись данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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(), которая. . .
|