Помощь - Поиск - Пользователи - Календарь
Полная версия: компонент Tserversocket возвращает ошибку
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Guest*
Пишу простейший код на кнопку:
Код

 ServerSocket1.Port := 1122;
 ServerSocket1.Active := true;

сразу ошибок не возникает, а вот если закрыть приложение, то ошибка: "Windows socket error: получен недопустимый аргумент (10022), on API 'closesocket'"
Помню что этих двух строк мало.. кто-нить напомнит, что ещё необходимо прописать для корректного запуска серверного сокета?
hiv
У меня как-то такая хрень вылазила, так я ручками закрывал - вроде помогало...
Код
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Close;
ServerSocket1.Free;
end;
Guest
Не , ошибка остается это не помогает...
$ad!st
Код
ServerSocket1.Active := false;


может это поможет???
я ваще с сокетами работать неумею, так что я неуверен что это правильно
Guest
нет, это также не помогает. Причем вот этот код:
Код
ServerSocket1.Port := 1122;
ServerSocket1.Active := true;
ServerSocket1.Active := false;

вызывает ту же самую ошибку!! хотя он ведь вроде бы корректен!
P@sh@
вроде порта достаточно, по крайней мере у меня все нормально, только что специально создал новое приложение с одним компонентом 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
P@sh@, в смысле проверяй программу? smile.gif это вся программа!
состоящая из одной кнопки и на ней код:

Код
ServerSocket1.Port := 1122;
ServerSocket1.Active := true;


а после закрытия приложения ошибка... и самое интересное другие порты также дают её, хотя помню ранее ни с чем подобным не сталкивался и все работало отлично...
hiv
Попробуй сервиспак 2-ой поставить, если у тебя Delphi6
Guest
У меня Дельфи 7 и ВинХР без паков. В ближайшее время поставлю SP2 отпишу о результатах.
Кстати, но это если у меня экзэшник такой нерабочий, то и у остальных юзеров, не имеющих по видимому СП2 будут те же ошибки?

Скажите, а какое основное отличие при посылке сообщений через TUPDSocket, TTCPClient/TTCPSocket...
последние два случаем не смогут служить заменой TClientSocket/TServerSocket??
P@sh@
Скажите, а какое основное отличие при посылке сообщений через TUPDSocket, TTCPClient/TTCPSocket...
UDP просто отправляет пакеты, не заботясь о том, дошли ли они куда-нибудь, т.е. не поддерживает соединение... соответственно, сервер (udp в режиме listen) принимает любые udp-пакеты на заданный порт и должен сам отправить подтверждение, если надо...
TCP поддерживает связь автоматически, однако чем больше клиентов, тем мощнее нужен сервер, так как все активные соединения нужно держать в памяти (и в отдельном потоке, наверное).
последние два случаем не смогут служить заменой TClientSocket/TServerSocket??
имхо, одно и то же
hiv
Цитата
Кстати, но это если у меня экзэшник такой нерабочий, то и у остальных юзеров, не имеющих по видимому СП2 будут те же ошибки?

Если проблема в отсутствии СП у Windows, то и у остальных юзеров будут те же проблемы. Я точно знаю, что при Delphi7 + WinXP (без СП) существует ошибка: когда выполняешь ф-цию Format (форматирование строки для вывода), то выделяется память, которая освобождается только если выйти из программы. Я писал один сервис - он крутился 2 дня - потом умер, т.к. из-за этой ошибки все ОЗУ 512Мб было занято этим сервисом! Реализация ф-ции Format находится в системной DLL-ке. sad.gif
FrykT
Попробуй всю эту шнягу сунуть в
//try
//
//except end;

и можно еще ApplicationEvents сунуть, чтобы ошибки не вырывались наружу.
там где
onException, пишешь
// if false then
Guest*
FrykT за исключения спасибо! но если ошибка произошла (не важно визуально это отобразилось или нет), то коннект все равно наладить уже не удасться, я правильно понимаю?
hiv
Да, это просто обработка свершившейся ошибки, а саму ошибку это не устраняет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.