|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.09.2013, 12:06 | #1 |
Пользователь
Регистрация: 15.05.2008
Сообщений: 18
|
Пишу чат на UDP (помогите дописать)
Все набросал как нужно, отправляет куда нужно. Встал вопрос о проверки дохода дейтаграмм до получателя, если не дошла, то отсылаем запрос на повторную отправку. Думаю лучше всего сделать через TimeStamp проверку. Как с этим работать не знаю, помогите ребята
Делал проверку другим способом, отправкой сообщения об посылке и обратно что пришло сообщение, но это лишняя нагрузка на канал. Нужно через саму дейтаграмму. _____ Удалил вложенный файл с заражённым EXE модератор Последний раз редактировалось Serge_Bliznykov; 19.09.2013 в 09:05. |
18.09.2013, 20:21 | #2 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
1. Зачем столько (четыре!) UDP сокета? хватает одного IdUDPServer (по секрету сервер и посылать умеет IdUDPServer1.Send(...)
2. два таймера и никчемный поток... это не дописывать, переделайте все за мной
Не стесняемся, плюсуем!
|
18.09.2013, 23:27 | #3 |
Пользователь
Регистрация: 15.05.2008
Сообщений: 18
|
убрал лишний мусор
Как вы и сказали убрал все лишнее. Все эти компоненты и код были моими тщетными попытками реализации проверки датаграмм.
У вас есть идеи как сделать оптимально проверку? Чат1(исходник).zip ___________ я пересобрал архив, удалив из него заражённый Project1.exe Лечите вирус (Virus.Win32.Induc.b) на своём компьютере!! Модератор Последний раз редактировалось Serge_Bliznykov; 19.09.2013 в 08:48. |
19.09.2013, 06:09 | #4 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
подтвердить приемку можно только ответным сообщением...
Опять exeшник упаковал в архив! на экзешник ругается антивирь (win32.Induc) и гасит весь архив, нормально не скачать! перезалей и полечи компутер свой
Не стесняемся, плюсуем!
|
19.09.2013, 09:51 | #5 |
Пользователь
Регистрация: 15.05.2008
Сообщений: 18
|
Благодарю за совет, сам его не заметил. Все почистил, удалил. Отчёт VT только все равно одна бяка осталась. Но серьезного в ней нету.
Ув. Slym могли бы вы взглянуть на мой исходный код (ниже прикреплен), где я сделал проверку прихода сообщений и сказать, так ли вы имели ввиду? И если можно обойтись без лишних подтверждений и нагрузки на канал, можно ли еще проще сделать, чтобы избежать этого: отправил запрос, что сообщение послал и ждешь обратного запроса что пришло сообщение. Сам я только знаю на теории, что в дейтаграмме содержится в начале несколько байт с портом, адресом, временем отправки, адресом получателя и портом получателя возможно еще проверка хеша сообщения (смотрел перехваченные пакеты в wireshark) и можно ли как то синхронизировать время во всех запущенных клиентах и смотреть когда пришло сообщение из дейтаграммы. Допустим: 1клиент(1к) отправил сообщение 2к и если второй клиент получил его то отправляет отчет 1к, если 2к ничего не получил, то не отправляет ничего и в этом случае 1к ждет отчета, но через n секунд понимая, что обратного запроса нет, выдает сообщение о недоставке. Вроде всю мысль изложил, поправте если где ошибаюсь пжл. Последний раз редактировалось Mars2107; 19.09.2013 в 09:53. |
19.09.2013, 12:41 | #6 |
Форумчанин
Регистрация: 16.03.2013
Сообщений: 599
|
Секунды - слишком долго. Udp вроде посылает данные по частям по N байт (8 вроде), доставку и целостность каждого пакета надо проверять. Затем клиент эти пакеты должен собрать и обработать. Сам могу ошибаться.
Более того Udp может и вовсе не посылать клиенту пакеты, т.е. посылать их в пустоту и это тоже надо проверять теми же обратными сообщениями.
alextrof94$gmail.com
|
19.09.2013, 13:36 | #7 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
я бы делал так.
1. Очередь сообщений: можно обычной TStringList для начала, но доп вкусности там сложно хранить. а хранить надо iport, IDсообщения (случайная величина при старте приложения потом +случайный x для каждого сообщения), таймаут подтверждения, само сообщение. так что сразу бадяжим record псевдокод (дельфи под рукой нет) Код:
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 19.09.2013 в 13:40. |
19.09.2013, 14:32 | #8 |
Пользователь
Регистрация: 15.05.2008
Сообщений: 18
|
Немногое я отсюда понял, но куда это все вставлять? (я не так давно занимаюсь программированием)
Код:
Потом вставляю процедуру Код:
|
19.09.2013, 20:15 | #9 |
Форумчанин
Регистрация: 16.03.2013
Сообщений: 599
|
Если недавно пишешь программы, зачем лезть в UDP? Юзай TCP и отправку строк, tcp все проверки сделает за тебя.
alextrof94$gmail.com
|
19.09.2013, 20:19 | #10 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
как-то так
Держи...
как-то так
Не стесняемся, плюсуем!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синхронизировать чат на Indy UDP, способы реализации. | Mars2107 | Помощь студентам | 2 | 23.08.2013 20:58 |
программа чат на udp сокетах builder c++ 6 | Konstantin_ua | Помощь студентам | 2 | 14.05.2013 08:46 |
Чат на UDP | f3arnil | Фриланс | 5 | 04.02.2013 16:31 |
Чат на UDP | ImmortalAlexSan | Работа с сетью в Delphi | 0 | 03.05.2010 13:08 |
помогите сделать программу - чат (Indy UDP) | dr_Lev | Помощь студентам | 2 | 02.12.2007 14:49 |