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

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

27.09.2012, 11:57. Показов 4695. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2012, 11:57
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Я конечно понимаю, читать сдк скучно и неинтересно, сразу хочется руками потрогать, тогда почему бы не скачать готовый исходник и пилить его под себя? Идея неновая и реализаций ее множество.
0
219 / 125 / 99
Регистрация: 14.03.2011
Сообщений: 628
28.09.2012, 12:12  [ТС] 14
искала исходники. в одном направлении клиент-сервер есть и много, а сервер-сервер например ни разу не встретила тоже самое как клиент-клиент.
искала, читала статьи по созданию таких приложений, только все что не попадались были клиент-сервер и в одну сторону.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
28.09.2012, 19:02 15
У udp-компонента, в твоем случае например TIdUDPClient, есть методы приема и есть методы передачи данных.
В соответствии с протоколом инф.обмена в каждый момент времени один из партнеров по обмену передает данные (вызывает методы передачи), другой ожидает и принимает эти данные (вызывает методы приема). Вот и всё. И никаких коннектов, серверов, клиентов.
Т.е. обе стороны обмена инициируют свои компоненты, занимая каждый свой порт, естественно свободный и заранее известный партнеру.
Передающая сторона указывает адрес-порт принимающей и передает ей сообщение. Получив сообщение другая сторона может зная адрес и порт партнера может точно таким же образом ответить.
Вопросы прохождения NAT и файрволов здесь для простоты не рассматриваем - это отдельная песня, во много раз сложнееп твоей примитивной задачи.
1
28.09.2012, 19:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2012, 19:02
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru