Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TspClient и TspServever [D7, XP]


Страницы:   1 2 3 4 5 6 7 8

kostyl_kostyl ©   (2009-08-12 12:38:00) 

Добрый день. Прошу показать пример обмена сообщениями сервера и клиента с помощью этих компонентов. У меня не выходит.
Я пишу:

procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
begin
 TcpServer1.Sendln('Ответ');
end;
//-----
 if TcpClient.Connect then
 begin
   TcpClient.Sendln('Запрос');
   Response := TcpClient.Receiveln;
   ShowMessage(Response);
 end
 else
   ShowMessage('Нет ответа');
 TcpClient.Disconnect;    

В лучшем случае  выдает пустую строку. В худшем зависает на Response := TcpClient.Receiveln;. Помогите разобраться.
Заранее благодарю.


kostyl_kostyl   (2009-08-17 12:12:00) [21]

Да, я действительно не знаю принципов работы  серверов и клиентов через TCP/IP. Знаю там, запрос - ответ, и все. Это мне урок. Дык мне просто полсать запрос на OnConnect клиента и не париться с циклами этими? Или как?


Anatoly Podgoretsky   (2009-08-17 11:50:00) [22]

> kostyl_kostyl  (14.08.2009 17:51:04)  [124]

Ты похоже просто не понимаешь ни принципы работы ассинхронной работы и что важнее принципы работы серверов и клиентов через TCP/IP. Это протокол с акцептированием, без акцептирования рвутся только сетевые черви.


Anatoly Podgoretsky   (2009-08-17 11:48:00) [23]

> kostyl_kostyl  (14.08.2009 17:51:04)  [124]

Это неверный алгоритм, протим принципов работы ассинхронных компонент, до Accept не надо ничего посылать, а то тебя быстро в хакеры зачислят файрволы и возможно на заметку возьмут администраторы.


kostyl_kostyl   (2009-08-17 11:23:00) [24]

Наверно проще будет написать обертку для таких случаев, чтобы в следующий раз не париться...


Сергей М.   (2009-08-17 11:07:00) [25]

Всенепременно)


kostyl_kostyl   (2009-08-17 11:04:00) [26]

Я так понял мне надо еще проверять WSAEWOULDBLOCK  кроме WSAEALREADY?


kostyl_kostyl   (2009-08-15 11:36:00) [27]

Спасибо.


Сергей М.   (2009-08-15 01:07:00) [28]


> если в OnError ошибка=WSAE NOTCONN, кручусь дальше


Справка гласит:

For a nonblocking socket, until the connection attempt completes all subsequent calls to connect on the same socket will fail with the error code WSAE ALREADY.

Зачем нести отсебячину ?


Сергей М.   (2009-08-15 01:00:00) [29]


> kostyl_kostyl   (14.08.09 14:52) [118]


А ты не пробовал справкупочитать ?
В ней ВСЕ написано - какие коды отказов ждать от той или иной ф-ци при тех или иных условиях ..

У меня, знаешь ли, нет великого желания цитировать ее здесь, справку ту самую.


> асинхронные режим - жестокая штука


Да уж)

Эт тебе не Пых-Пых развратный: вызвал какую-нть хрень - и жди результата, бо обязательно тут же будет)


> Как узнать что соединение установлено?


Вызывай повторно Open.. И следи ВНИМАТЕЛЬНО за OnError и OnConnect.


kostyl_kostyl   (2009-08-14 23:54:00) [30]

Ха. А я про клиент.


Anatoly Podgoretsky   (2009-08-14 20:11:00) [31]

> kostyl_kostyl  (14.08.2009 17:51:04)  [124]

Вопрос был другой, а для этого вопроса OnError, но при нормальном коннекте OnError не будет. Механизм в сильном приближение такой

OnListen > OnAccept|OnError (выход) > работа с сокетом  > OnDisconnect

И про что ты сейчас говоришь про сервер или про клиента, я про сервер.


kostyl_kostyl   (2009-08-14 17:51:00) [32]


> Anatoly Podgoretsky ©   (14.08.09 17:45) [123]
>
> OnAccept

ааа... Ну мне надо тоже учитывать таймут коннекта, поэтому я отсылаю запрос на коннект, а потом вхожу в цилк и в нем посылаю запрос; и если в OnError ошибка=WSAENOTCONN, кручусь дальше, пока таймаут не сработает или ошибки WSAENOTCONN не будет. Нормальны вариант?


Anatoly Podgoretsky   (2009-08-14 17:45:00) [33]

OnAccept


kostyl_kostyl   (2009-08-14 17:40:00) [34]

есть, OnError....


kostyl_kostyl   (2009-08-14 16:33:00) [35]

а, я понял сервер ждет данных, которые отослали до соединения. Как узнать что соединение установлено? Если оно не установлено, то к примеру  по Сергей М. ©   (13.08.09 16:10) [97]в вайл не зайдет программа? Есть событие какое-то?


kostyl_kostyl   (2009-08-14 16:19:00) [36]

блин, асинхронные режим - жестокая штука, ни какой однозначности. Теперь сервер не ловит запросов...


kostyl_kostyl   (2009-08-14 15:05:00) [37]

или как сервер должен реагировать? Я посылаю запрос, на сервере генерируется акцепт и сервер зависает на РесивБуфер.


kostyl_kostyl   (2009-08-14 14:52:00) [38]

Я так понял, что мне еще надо добавить:

f (SocketError <> WSAEWOULDBLOCK) and
 (SocketError <> WSAENOTCONN)  then
TTCPClient(Sender).Disconnect;


Сергей М.   (2009-08-14 12:40:00) [39]


> например в ОтЕррор может стать известно


Угу.


> у меня маленькая


Не беда)
Тренируй ее, культивируй - и вырастет большая-пребольшая)


kostyl_kostyl   (2009-08-14 12:36:00) [40]


> станет известно позже.

Ага, я понял, например в ОтЕррор может стать известно.
> Ты лучше сюда отпишись - не одному мне любопытно

Ок, как будет готова, обязательно сюда отпишу.
ЗЫ: у меня маленькая посещаемость =)


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо