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-12 13:40:00) [141]


> Ну да, примерно так

А я вайлом не повешу сервер?


Сергей М.   (2009-08-12 13:38:00) [142]


> Palladin ©   (12.08.09 13:29) [12]


Ты куда-то не туда смотришь..
У TTCPServer нет события OnConnect.


Сергей М.   (2009-08-12 13:37:00) [143]


> Так чтоли?


Ну да, примерно так.


> Если несколько серверов слушают один порт


Это еще умудриться надо, чтобы заставить несколько серверов слушать на одном и том же адресе:порту


Palladin   (2009-08-12 13:29:00) [144]


> [10] Сергей М. ©   (12.08.09 13:20)

хм...

After the server socket accepts the connection, the client socket completes the connection, and an OnConnect event occurs for the client socket.

чего я не понимаю?


kostyl_kostyl   (2009-08-12 13:27:00) [145]


procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
begin
 while ClientSocket.Connected do
 begin
   if ClientSocket.Receiveln <> '' then
   begin
     ClientSocket.Sendln('Ответ');
   end;  
 end;
end;

Так чтоли?
Еще такой вопрос. Если несколько серверов слушают один порт может быть проблема когда только один отправляет ответ а для других запрос не приходит? Если да то как избежать этого?


Сергей М.   (2009-08-12 13:20:00) [146]

В обработчике OnAccept следует организовать цикл вида:

пока соединение существует делать
начало
  дождаться и получить запрос
  обработать полученный запрос
  отправить ответ-результат обработки запроса
конец


kostyl_kostyl   (2009-08-12 13:16:00) [147]

Нет его дело послать ответ. Дело клиента дождаться ответа, если нет ответа, то делать че-то дальше.


Сергей М.   (2009-08-12 13:13:00) [148]


> как определить отправлен ли ответ?


Давай определимся - так ли уж нужно, чтобы соединение разрывалось по инициативе именно сервера ?


kostyl_kostyl   (2009-08-12 13:10:00) [149]


> Вряд ли он чего-либо дождется

Если делаю так в сервере

ClientSocket.Sendln('Ответ');
Sleep(2000);

тогда получаю.
А как определить отправлен ли ответ?


Сергей М.   (2009-08-12 13:08:00) [150]


> Наверно клиенту надо подождать


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


kostyl_kostyl   (2009-08-12 13:02:00) [151]

А...
Переписал так:

procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
begin
 ClientSocket.Sendln('Ответ');
end;

Нет ответа. Наверно клиенту надо подождать как о или как?


Dennis I. Komarov   (2009-08-12 13:01:00) [152]


kostyl_kostyl   (12.08.09 12:38)  
> procedure TForm1.TcpServer1Accept(Sender: TObject;
>   ClientSocket: TCustomIpClient);



>    TcpClient.Sendln('Запрос');

И где оно обрабатывается?


Сергей М.   (2009-08-12 12:56:00) [153]


> procedure TForm1.TcpServer1Accept(Sender: TObject;
>   ClientSocket: TCustomIpClient);


Если звезды на небе зажигают, значит они кому-то нужны, не так ли ?
Если так, то почему у тебя не возник вполне резонный интерес к этому параметру ?


Сергей М.   (2009-08-12 12:54:00) [154]


> kostyl_kostyl


Снрвер призван обслуживать множествоклиентов.

Возникает вполне резонный вопрос: какому конкретноклиенту из этого множества ты отправляешь сообщение в строчке

TcpServer1.Sendln('Ответ');

?


Palladin   (2009-08-12 12:50:00) [155]


> TForm1.TcpServer1Accept

и чем же ты руководствовался при выборе события?


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

Наверх

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