Форум: "Сети";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];
ВнизКакой-то глюк с ClientSocket Найти похожие ветки
← →
TankMan (2003-02-12 00:52) [0]Поставил этот сокет, настроил, чтобы он при создании формы, пытался коннектится по IP-шнику одному, поставил обработчик, в его же свойствах OnError, чтобы закрывал сокет, выдавал сообщение об ошибке подключения и занулял ошибку.... в итоге запускаю в дельфях появляется сообщение уведомляющее меня о том, что неполучается создать новый сокет, ошибка возникает именно после команды open, и до обработчика OnError не доходит эта ошибка, поставил подключение сокета в try...except ошибка выдается моя, но всеравно, если дальше в программе без этих try...except пытатся подключится, выдается системное сообщение :(.. в чем может быть проблема? может чего в настройках проэкта ? или еще чего? А может обработчик как нибудь самому поставить? Если так, то пример бы совсем не помешал...
← →
TankMan (2003-02-12 00:54) [1]Да забыл сказать... IP-шника, который я указываю несуществует... (от сети отключился)
← →
TButton (2003-02-12 08:46) [2]какое именно сообщение?
варианты:
1.переставь с onCreate на onActivate.
2.бросай Дэлфу, садись за умные книги /посвящаю этот вариант Ketmar"у/
← →
dimich1978 (2003-02-12 08:46) [3]Понятно тебе типа связь нужна устойчивая между сервером и клиентом.
Так вот посмотри на примере как это работает по поиску на этом сайте найди готовую прогу с исходниками Server-Klient 1.0
или так
//Если отсоединился включаем таймер на новый коннект
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
timer2.enabled:=true;
end;
//обрабатываем ошибку
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ClientSocket1.Socket.Disconnect(ClientSocket1.Socket.SocketHandle);
ErrorCode:= 0;
end;
//Читаем из реестра порт и айпи и коннектимся
procedure TForm1.Timer2Timer(Sender: TObject);
var regini:tregistry;
begin
RegIni:=TRegIniFile.Create;
RegIni.RootKey:=HKEY_CURRENT_USER;
RegIni.OpenKey("SOFTWARE",true);
RegIni.OpenKey("DvaASoft",true);
RegIni.OpenKey("CONFIG",true);
if not ClientSocket1.Active then
if (regini.readString("IP")<>"")and(regini.readString("Port")<>"") then begin
clientsocket1.Host:=regini.readString("IP");
clientsocket1.Port:=strtoint(regini.readString("Port"));
clientsocket1.Active:=true;
end;
regini.free;
end;
//Если сконнектились то вырубаем таймер
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
timer2.Enabled:=false;
end;
← →
mrcat (2003-02-12 09:24) [4]код показывайте
← →
Digitman (2003-02-12 09:38) [5]> //Если сконнектились то вырубаем таймер
"вырубать" нужно в собственном обработчике таймера, после ClientSocket1.Active:= True
"врубать" же следует в OnError() после обработки ошибки, если ошибка связана именно с недоступностью хоста
← →
TankMan (2003-02-12 11:13) [6]Самый то прикол, что когда я в ХР запускаю тот же код, он нормально работает, но трабла в том, что я пишу прожку под 98, а не для ХР. А код приводить..
вобщем на форме у меня стоит компонент scClient.
procedure TfrmMain.FormCreate(Sender: TObject);
........
csClient.address:=IPServer;
csClient.Port:=8194;
csClient.open; <<== Вот на этой строчке возникает ошибка
вроде "Can"t create new socket" вроде так...
.........
А вот что, в обработчике ошибок...
procedure TfrmMain.csClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
csClient.Close;
MessageDlg("Произошла ошибка подключения к серверу",mtError,[mbOK],0);
ErrorCode:=0;
end;
И в итоге получается, что до этого он и не доходит :(
← →
Digitman (2003-02-12 11:20) [7]
> вроде "Can"t create new socket" вроде так...
не "вроде", а - точное сообщение приводи
сдается мне, что у тебя TCP-протокол не установлен
← →
TButton (2003-02-12 18:11) [8]2Digitman ©
А как без TCP-протокола ИНет юзать?
← →
TankMan (2003-02-13 00:19) [9]Точно!! =))Я удалил контроллер удаленного доступа, а сетевушку вытащил, поэтому и вообще TCP небыло, а в инет я выхожу с ХР.. точно, точно... щас попробовал, получилось.. обработчик заработал... НО, Обработчик ошибок он и в африке обработчик, почему же без TCP ошибка не доходит? Должна же наверное?
← →
mrcat (2003-02-13 01:02) [10]TankMan © (13.02.03 00:19)
>>почему же без TCP ошибка не доходит? Должна же наверное?
TCustomSocket.OnError
Occurs when the socket fails in making, using, or shutting down a connection.
О присутствии TCP-протокола здесь ничего не сказано.
← →
Digitman (2003-02-13 08:24) [11]потому что компонент TClientSocket пытается создать гнездо с явно ассоциированным с ним протоколом TCP ... на этапе вызова ф-ции socket() и происходит ошибка... т.е. до connect() даже дело не доходит
← →
TankMan (2003-02-14 01:22) [12]А может может можно как-то отлавливать эту ошибку, кроме try...except ? Можть на какое-то сообщение или обрабатывать все сообщения об ошибках и среди них искать такую ошибку и выдавать свое сообщение? Если так? никто не знает как сделать такой обработчик?
← →
ole (2003-02-14 04:38) [13]А может просто пытаться инициализировать WinSock в самом начале, просто проверяя есть ли возможность привязки к TCP/IP?
← →
Digitman (2003-02-14 08:22) [14]чего мудрить-то ?
все сведения для идентификации отказа и его обработки доступны тебе :
try
ClientSocket1.Open;
except
on e: ESocketError do
begin
if e.Message = "Can""t create new socket" then
ShowMessage("Хрень какая-то у меня с TCP-протоколом");
end
else
raise;
end;
← →
TButton (2003-02-14 20:35) [15]какие умные мысли поперли... меня до таких еще апгрейдить и апгрейдить...
← →
TankMan (2003-02-15 00:23) [16]>>Digitman
Дык блин... мне не в одном месте прийдется пытаться коннектить клиента, и в каждом таком месте писать эти все try except и т.д.? Засорять код...
← →
mrcat (2003-02-15 00:39) [17]TankMan © (15.02.03 00:23)
>>Дык блин... мне не в одном месте прийдется пытаться коннектить клиента, и в каждом писать эти все try except
Дык, млин, что б не "засорять код" процедуру коннекта надо локализовать! А не страдать - вызывая коннект в разных частях программы =)
← →
TankMan (2003-02-17 00:33) [18]Тоже верно :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c