![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Guest* |
![]()
Сообщение
#1
|
Гость ![]() |
Пишу простейший код на кнопку:
Код ServerSocket1.Port := 1122; ServerSocket1.Active := true; сразу ошибок не возникает, а вот если закрыть приложение, то ошибка: "Windows socket error: получен недопустимый аргумент (10022), on API 'closesocket'" Помню что этих двух строк мало.. кто-нить напомнит, что ещё необходимо прописать для корректного запуска серверного сокета? |
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
У меня как-то такая хрень вылазила, так я ручками закрывал - вроде помогало...
Код procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ServerSocket1.Close; ServerSocket1.Free; end; -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Guest |
![]()
Сообщение
#3
|
Гость ![]() |
Не , ошибка остается это не помогает...
|
$ad!st |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код ServerSocket1.Active := false; может это поможет??? я ваще с сокетами работать неумею, так что я неуверен что это правильно -------------------- когда в руках молоток, все кажутся гвоздями
|
Guest |
![]()
Сообщение
#5
|
Гость ![]() |
нет, это также не помогает. Причем вот этот код:
Код ServerSocket1.Port := 1122; ServerSocket1.Active := true; ServerSocket1.Active := false; вызывает ту же самую ошибку!! хотя он ведь вроде бы корректен! |
P@sh@ |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
вроде порта достаточно, по крайней мере у меня все нормально, только что специально создал новое приложение с одним компонентом ServerSocket...
вот инфа из хелпа, так что проверяй программу: WSAEINVAL (10022) Invalid argument. Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket - for instance, calling accept on a socket that is not listening. |
Guest |
![]()
Сообщение
#7
|
Гость ![]() |
P@sh@, в смысле проверяй программу?
![]() состоящая из одной кнопки и на ней код: Код ServerSocket1.Port := 1122; ServerSocket1.Active := true; а после закрытия приложения ошибка... и самое интересное другие порты также дают её, хотя помню ранее ни с чем подобным не сталкивался и все работало отлично... |
hiv |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Попробуй сервиспак 2-ой поставить, если у тебя Delphi6
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Guest |
![]()
Сообщение
#9
|
Гость ![]() |
У меня Дельфи 7 и ВинХР без паков. В ближайшее время поставлю SP2 отпишу о результатах.
Кстати, но это если у меня экзэшник такой нерабочий, то и у остальных юзеров, не имеющих по видимому СП2 будут те же ошибки? Скажите, а какое основное отличие при посылке сообщений через TUPDSocket, TTCPClient/TTCPSocket... последние два случаем не смогут служить заменой TClientSocket/TServerSocket?? |
P@sh@ |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
Скажите, а какое основное отличие при посылке сообщений через TUPDSocket, TTCPClient/TTCPSocket...
UDP просто отправляет пакеты, не заботясь о том, дошли ли они куда-нибудь, т.е. не поддерживает соединение... соответственно, сервер (udp в режиме listen) принимает любые udp-пакеты на заданный порт и должен сам отправить подтверждение, если надо... TCP поддерживает связь автоматически, однако чем больше клиентов, тем мощнее нужен сервер, так как все активные соединения нужно держать в памяти (и в отдельном потоке, наверное). последние два случаем не смогут служить заменой TClientSocket/TServerSocket?? имхо, одно и то же |
hiv |
![]()
Сообщение
#11
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата Кстати, но это если у меня экзэшник такой нерабочий, то и у остальных юзеров, не имеющих по видимому СП2 будут те же ошибки? Если проблема в отсутствии СП у Windows, то и у остальных юзеров будут те же проблемы. Я точно знаю, что при Delphi7 + WinXP (без СП) существует ошибка: когда выполняешь ф-цию Format (форматирование строки для вывода), то выделяется память, которая освобождается только если выйти из программы. Я писал один сервис - он крутился 2 дня - потом умер, т.к. из-за этой ошибки все ОЗУ 512Мб было занято этим сервисом! Реализация ф-ции Format находится в системной DLL-ке. ![]() -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
FrykT |
![]()
Сообщение
#12
|
Гость ![]() |
Попробуй всю эту шнягу сунуть в
//try // //except end; и можно еще ApplicationEvents сунуть, чтобы ошибки не вырывались наружу. там где onException, пишешь // if false then |
Guest* |
![]()
Сообщение
#13
|
Гость ![]() |
FrykT за исключения спасибо! но если ошибка произошла (не важно визуально это отобразилось или нет), то коннект все равно наладить уже не удасться, я правильно понимаю?
|
hiv |
![]()
Сообщение
#14
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Да, это просто обработка свершившейся ошибки, а саму ошибку это не устраняет.
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 7:10 |