Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
8-30478
Гога
2003-01-06 14:35
2003.04.10
вебкамера


14-30541
Дмитрий К.К.
2003-03-21 06:39
2003.04.10
Именинники 21 марта


14-30562
MasterA
2003-03-25 06:57
2003.04.10
Speech Api


6-30489
AGAMEMNUM
2003-02-18 08:39
2003.04.10
Как сохранить HTML?


14-30598
Konstantionov
2003-03-25 19:31
2003.04.10
Что почитать по assembler?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский