Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Sockets. Ошибка при подключении   Найти похожие ветки 

 
P@$l-l0l-(   (2004-10-08 18:29) [0]

Расскажите пожалуйста, как обработать ошибку при подключении клиента к серверу Socket.Open. При подключении к несуществующему адресу выскакивает ошибка. Как сделать проверку или что-то в этом роде?


 
P@$l-l0l-(   (2004-10-08 21:32) [1]

И ещё один вопрос.
Объясните пожалуйста, почему этот код не работает. Кажись всё правильно.

procedure TForm1.FormCreate(Sender: TObject);
begin
 SSocket.Port:=1666;
 SSocket.Active:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SSocket.Active:=false;
end;

procedure TForm1.SSocketClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 ToSend:=SSocket.Socket.ReceiveText; // Здесь возникает ошибка, как я понял.
end;

procedure TForm1.SSocketClientWrite(Sender: TObject;
 Socket: TCustomWinSocket);
var
 i:integer;
begin
 if ToSend <> "" then
 begin
   for i:=0 to SSocket.Socket.ActiveConnections-1 do
     SSocket.Socket.Connections[i-1].SendText(ToSend);
   ToSend:="";
 end;
end;

end.

Спасибо.


 
Verg ©   (2004-10-08 21:55) [2]

У клиента обрабатывай OnError -
ErrorCode даст тебе номер (код) ошибки, а сам ErrorCode надо занулить.

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 // Вместо коментария должны быть действия по логике соответсвующие возникшей ошибке (ErrorEvent)
 if Socket.SocketHandle <> INVALID_SOCKET then
   Socket.Close;
 ErrorCode := 0;
end;

procedure TForm1.SSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
ToSend:=(*SSocket.*)Socket.ReceiveText; // Здесь возникает ошибка, как я понял.
end;

Вот здесь событие ClientRead было вызвано в связи с появлением приятых данных у конкретного сокета, который тебе и передал сервер в параметре Socket : TCustomWinSocket.
Вот у него и читай принятые им данные.


> procedure TForm1.SSocketClientWrite(Sender: TObject;
>  Socket: TCustomWinSocket);
> var
>  i:integer;
> begin
>  if ToSend <> "" then
>  begin
>    for i:=0 to SSocket.Socket.ActiveConnections-1 do
>      SSocket.Socket.Connections[i-1].SendText(ToSend);
>    ToSend:="";
>  end;
> end;


Это вообще неверно.

Событие ClientWrite возникло не у всех активных сокетов, а у одного, конкретного, опять же переданного тебе в параметре Socket: TCustomWinSocket.

Событие это означает, что у сокета вновь появилась возможность передать какую-либо порцию данных в соединение.
А если эта возможность и не пропадала, то соотв. и события этого может и не возникнуть. Хотя один раз оно происходит всегда - после успешного установления соединения.


 
P@$l-l0l-(   (2004-10-09 01:28) [3]

Пасиб, вроде всё понятно. :)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.037 c
4-1099653795
Shiza
2004-11-05 14:23
2004.12.19
Работа со звуком.


4-1099509080
ser_ega
2004-11-03 22:11
2004.12.19
Сканирование!


3-1100675438
Дырчик
2004-11-17 10:10
2004.12.19
Поле типа дата


11-1084265043
Bez
2004-05-11 12:44
2004.12.19
OnResize


3-1100597555
REA
2004-11-16 12:32
2004.12.19
Самый шустрый сервер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский