Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.10;
Скачать: CL | DM;

Вниз

Какой-то глюк с 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
6-30498
timer
2003-02-19 15:15
2003.04.10
как можно листануть файлы на удалееноой...


3-30210
Stas
2003-03-20 15:10
2003.04.10
Данные & Интернет


1-30423
Rom@n
2003-03-31 07:33
2003.04.10
Prokrutka ScrollBox


1-30359
dim-
2003-03-31 01:41
2003.04.10
можно ли создать Мемо без формы?


14-30533
Igit
2003-03-21 20:23
2003.04.10
Где автозагрузка