Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628

Обработка ошибки

27.09.2012, 11:57. Показов 4755. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такая возникла проблема.
по умолчанию порт у сервера 10001, а у клиента 10000.
Пыталась сделать, чтобы если порт у сервера занят уже, то поменять значения портов наоборот.
но проблема в том, что если это сделать, все равно вылетает ошибка Could not bind socket. Address and port are already in use. Причем если при обработке указать два совсем других порта (которые не заняты) все равно после обработки исключительной ситуации возникает эта же ошибка.
Delphi Скопировано
1
2
3
4
5
6
7
8
9
10
11
try
      IdUDPClient1.Active:= true;
      IdUDPServer1.Active:= true; //как сделать, чтобы ошибка не показывалась тут, если порт занят
      except
      IdUDPClient1.Active:= false;
      IdUDPServer1.Active:= false;
      IdUDPServer1.DefaultPort:=10000;
      IdUDPClient1.Port:=10001;
      IdUDPClient1.Active:= true;
      IdUDPServer1.Active:= true;//и вот тут
      end;
и вообще, может ли вызывать эту ошибку то, что к порту уже подключен клиент?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2012, 11:57
Ответы с готовыми решениями:

Обработка ошибки в Клиент - Серверном приложении
Доброго времени суток. Писал чат на сокетах. Есть приложение Сервер и приложение Клиент. Клиент работает, естественно, только тогда,...

При повторном появлении ошибки обработка ошибки не срабатывает
Логика: - Пользователь. Нажимает кнопку; - Код . Создаёт "Recordset" "rstStud"(студенты) и "rstGroupStud"(ГруппыСтуденты);...

Обработка ошибки
Выскакивает ошибка при прохождении одного из тестов: private readonly double array = { 1, 2, 3, 4 }; public void...

14
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.09.2012, 12:18
Зачем вообще в одном и том же приложении понадобился и сервер и клиент ?
В случае udp вполне достатно одного - либо сервера либо клиента.
0
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
27.09.2012, 13:20  [ТС]
mss, для передачи звука.
насколько мне известно (может быть плохо известно) клиент принимать не может. А мне надо в двух направлениях. что-то типа голосового чата.
Один пользователь выбирает из базы, которая хранит все IP адреса, адресата и звонит ему. Тот в совю очередь может ответить, сбросить, либо быть занят.
В одном направлении не проблем нету сделать, а для двух сделала так.
просто по другому как сделать ума не приложу. Со всем этим впервые имею дело.
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
27.09.2012, 13:49
Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
Пыталась сделать, чтобы если порт у сервера занят уже, то поменять значения портов наоборот.
И кем же он уже занят? И смысл менять, тогда клиент не сможет занять этот порт и опять исключение.

Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
и вообще, может ли вызывать эту ошибку то, что к порту уже подключен клиент?
По UDP никто никуда не подключается. Пакет шлется на адрес и порт, а открыт на том адресе тот порт или нет и дошел ли вообще пакет никого не волнует.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.09.2012, 13:57
Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
клиент принимать не может
Может. И в TCP и в UDP.
Принципиальная разница лишь в том что в TCP инициатором подключения может являться только клиент, но не сервер.
А в UDP понятие "подключение" отсутствует в принципе.
0
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
27.09.2012, 19:35  [ТС]
Цитата Сообщение от Nutserus Посмотреть сообщение
По UDP никто никуда не подключается. Пакет шлется на адрес и порт, а открыт на том адресе тот порт или нет и дошел ли вообще пакет никого не волнует.
а откуда тогда ошибка Could not bind socket. Address and port are already in use??

Добавлено через 52 секунды
Цитата Сообщение от mss Посмотреть сообщение
Может. И в TCP и в UDP.
Принципиальная разница лишь в том что в TCP инициатором подключения может являться только клиент, но не сервер.
А в UDP понятие "подключение" отсутствует в принципе.
просто тогда придется разграничивать,что на одном запускается клиент, а на другом сервер. это удобно если два компьютера. а если больше?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.09.2012, 20:36
Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
придется разграничивать,что на одном запускается клиент, а на другом сервер. это удобно если два компьютера. а если больше?
Это я, наверно, со стенкой говорил. С дубовой.
0
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
27.09.2012, 20:45  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Это я, наверно, со стенкой говорил. С дубовой.
хорошо, что Вы в этом прекрасно разбираетесь. люди мне кажется тут за помощью обращаются.
место того, чтобы вот такие реплики высказывать, можно просто помочь или что-нибудь посоветовать, если видите, что человек не может разобраться.
1
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.09.2012, 21:03
Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
что-нибудь посоветовать
Я УЖЕ посоветовал - выкинь из воего приложения либо IdUDPClient либо IdUDPServer.
Заявленная тобой функциональность приложения ничуть не пострадает, при этом идея-фикс "поменять значения портов наоборот" рассосется сама собой.
0
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
27.09.2012, 22:42  [ТС]
mss, ты сказал, что вполне хватит. после этого я сказала для чего мне это надо и больше ты ничего вразумительного по этому поводу не сказал.
будь так добр, объясни каким образом это организовать. Клиент-сервер? клиент-клиент? или как?
я обратилась просто за помощью. Я не прошу для меня ничего писать, просто хочу разобраться.
как заставить принимать данные клиенту? я этого просто не понимаю.
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
28.09.2012, 00:33
Кладешь на форму IdUDPServer1, чтобы послать пакет вызываешь IdUDPServer1.Send(); , принимаешь процедурой IdUDPServer1UDPRead.
1
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
28.09.2012, 11:00  [ТС]
Nutserus, ага.
порты должны же быть одинаковые? так?
просто тут самая проблемка, что если порты одинаковые, то вылазит ошибка и компонент не становится активным.
или я чего-то не понимаю...
если пытаюсь отправлять сервером и принимать сервером, то вылазит ошибка "Socket Error #10054 Connection reset by peer"

Добавлено через 34 минуты
и плюс, даже если отправлять простое сообщение, а не буффер, то OnRead все равно не реагирует...
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
28.09.2012, 11:53
Цитата Сообщение от Chertenok_n_13 Посмотреть сообщение
порты должны же быть одинаковые? так?
Одинаковые с чем? У тебя один компонент и один порт.

Я конечно понимаю, читать сдк скучно и неинтересно, сразу хочется руками потрогать, тогда почему бы не скачать готовый исходник и пилить его под себя? Идея неновая и реализаций ее множество.
0
 Аватар для Chertenok_n_13
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
28.09.2012, 12:12  [ТС]
искала исходники. в одном направлении клиент-сервер есть и много, а сервер-сервер например ни разу не встретила тоже самое как клиент-клиент.
искала, читала статьи по созданию таких приложений, только все что не попадались были клиент-сервер и в одну сторону.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
28.09.2012, 19:02
У udp-компонента, в твоем случае например TIdUDPClient, есть методы приема и есть методы передачи данных.
В соответствии с протоколом инф.обмена в каждый момент времени один из партнеров по обмену передает данные (вызывает методы передачи), другой ожидает и принимает эти данные (вызывает методы приема). Вот и всё. И никаких коннектов, серверов, клиентов.
Т.е. обе стороны обмена инициируют свои компоненты, занимая каждый свой порт, естественно свободный и заранее известный партнеру.
Передающая сторона указывает адрес-порт принимающей и передает ей сообщение. Получив сообщение другая сторона может зная адрес и порт партнера может точно таким же образом ответить.
Вопросы прохождения NAT и файрволов здесь для простоты не рассматриваем - это отдельная песня, во много раз сложнееп твоей примитивной задачи.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2012, 19:02
Помогаю со студенческими работами здесь

обработка ошибки
Добрый день! Подскажите, пожалуйста, алгоритм, как сделать, чтобы в базу данных через dbedit с помощью navigator нельзя было добавить...

Обработка ошибки
Здравствуйте,подскажите,пожалуйста,как обработать ошибку:при вводе заданной точности я ввожу символьное значение и программа прерывается....

Обработка ошибки
Я получаю таги таким образом: TAG_ID3 *id3=(TAG_ID3*)BASS_ChannelGetTags(chan, BASS_TAG_ID3); // get the ID3 tags Далее например мне...

Обработка ошибки
добавляю данные в таблицу: Form1->ADOTable1->Insert(); Form5->ADOTable1->Insert(); ...

Обработка ошибки
Почему в любом случае есть лист или нет с таким названием все равно срабатывает If MsgBox("Лист уже создан сделать копию?",...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
Реляционная модель и правила Кодда: фундамент современных баз данных
Codd 05.04.2025
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер