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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
8-1096016836
dracula
2004-09-24 13:07
2004.12.19
как из midi файла прочитать тэги


1-1102446946
Ust
2004-12-07 22:15
2004.12.19
Автоматическое форматирование исходного кода


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


14-1101493291
Fay
2004-11-26 21:21
2004.12.19
Нужен программер на пост. работу


3-1100841839
S@lik
2004-11-19 08:23
2004.12.19
InterBase