![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ClientSocket посылает строку только со второго раза! [D6, Win2k]
sergrrey © (2002-06-28 10:33:00)Может кто встречал?
На форме только TClientSocket, TServerSocket и TButton
procedure TForm1.Button2Click(Sender: TObject);
begin
SS1.Active := true;
CS1.Host := "localhost";
CS1.Open;
CS1.Socket.SendText("Hi");
end;
Но сервер начинает это получать только со второго раза!
Grrey (2002-07-02 15:34:00) [1]Спасибо, ошибку понял!
Digitman (2002-07-01 08:18:00) [2]О факте реального коннекта говорит событие OnConnect()
О факте готовности передатчика после установления коннекта говорит событие OnWrite().
Отсюда и "плясать" нужно.
Malder (2002-06-28 22:25:00) [3]Верно.
1) CS1.Open;
2) CS1.Socket.SendText("Hi");
Первая комманда инициализирует подключение, но не ждет самого факта подключения, а сразу передает управление второй комманде. Но вполне естесственно, что вторая команда получает управление раньше, чем сокет успеет соединиться. Соответственно, получается попытка отослать данные ДО того, как произошло подключение. Из-за чего код и не работает.
Но также вполне очевидно, что когда ты нажмешь второй раз на кнопку, то сокеты уже соединены. Комманда CS1.Open; уже ничего не делает. А следущая за ней комманда CS1.Socket.SendText("Hi"); отсылает текст.
Wizard_Ex (2002-06-28 19:32:00) [4]Разбей на две части
одной кнопкой открывай сокет
другой отсылай чего-нибудь
.. CS1.Open;
.. CS1.Socket.SendText("Hi");
Он еще открыться не успевает
Digitman (2002-06-28 13:46:00) [5]Неверна она !
Впрочем, так же как и логика передатчика.
sergrrey (2002-06-28 12:46:00) [6]Та самая логока:
procedure TForm1.SS1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;
Digitman (2002-06-28 12:25:00) [7]Логика обработки события TServerSocket.OnClientRead(), реализованная тобой, некорректна или неверна в принципе.