Форум: "Сети";
Текущий архив: 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