Главная страница
    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.46 MB
Время: 0.035 c
11-1084284901
Merry
2004-05-11 18:15
2004.12.19
Как запретить меню формы


1-1101823918
Grim
2004-11-30 17:11
2004.12.19
Проблемы с TStream


8-1095442821
DelManiac
2004-09-17 21:40
2004.12.19
MP3 ---> CDA


1-1102144639
Gek1
2004-12-04 10:17
2004.12.19
Помогите разобраться со строкой кода


14-1101575891
OneFragLeft
2004-11-27 20:18
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский