Главная страница
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.025 c
1-1102019486
AlexHawk
2004-12-02 23:31
2004.12.19
Помогите с циклом...


1-1101906911
ANDREI
2004-12-01 16:15
2004.12.19
search


14-1101897095
Xaker
2004-12-01 13:31
2004.12.19
HookMonitor - или КОНЕЦ ВСЕМ Keylogger am !


1-1102146910
DelphiN!
2004-12-04 10:55
2004.12.19
Как перевести в режим редактирования SubItems ListView-a?


1-1102317420
Владимир С.
2004-12-06 10:17
2004.12.19
Delphi6 + Delphi7