![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Sockets. Ошибка при подключении [D7, Win2k]
P@$l-l0l-( © (2004-10-08 18:29:00)Расскажите пожалуйста, как обработать ошибку при подключении клиента к серверу Socket.Open. При подключении к несуществующему адресу выскакивает ошибка. Как сделать проверку или что-то в этом роде?
P@$l-l0l-( (2004-10-09 01:28:00) [1]Пасиб, вроде всё понятно. :)
Verg (2004-10-08 21:55:00) [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-08 21:32:00) [3]И ещё один вопрос.
Объясните пожалуйста, почему этот код не работает. Кажись всё правильно.
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.
Спасибо.