Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Sockets   Найти похожие ветки 

 
POSTER   (2004-10-07 20:03) [0]

уважаемые мастера. между TTcpClient и TTcpServer установлено соединение. в любой момент сервер может отправить данные клиенту. и наоборот(т.е. клиент серверу). и проблема в том, что никакое событие при получении данных клиентом не возбуждается. подскажите, плз, пути решения этой проблемы...


 
kaZaNoVa ©   (2004-10-07 20:55) [1]

замути режим блокированного сокета . .:))))


 
POSTER   (2004-10-07 21:17) [2]

и что? должно возбуждаться OnReceive?


 
kaZaNoVa ©   (2004-10-07 21:23) [3]

POSTER   (07.10.04 21:17) [2]
так OnReceive? вроде и так должно работать ..
- в чём трабла ?


 
POSTER   (2004-10-07 21:41) [4]

OnReceive на клиенте не не возбуждается.


 
kaZaNoVa ©   (2004-10-07 21:45) [5]

POSTER   (07.10.04 21:41) [4]
ужас ..  странно ...


 
POSTER   (2004-10-07 21:52) [6]

Это в Delphi 7. вот просто тестовый вариант:

сервер:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Sockets, StdCtrls;

type
 TForm1 = class(TForm)
   TcpServer1: TTcpServer;
   procedure TcpServer1Accept(Sender: TObject;
     ClientSocket: TCustomIpClient);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
begin
 ClientSocket.Sendln("123");
end;

end.

клиент:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Sockets, StdCtrls;

type
 TForm1 = class(TForm)
   TcpClient1: TTcpClient;
   Button1: TButton;
   Button2: TButton;
   procedure TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
     var DataLen: Integer);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
 var DataLen: Integer);
begin
 ShowMessage(IntToStr(DataLen));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TcpClient1.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 TcpClient1.Disconnect;
end;

end.

и это не работает. причём OnAccept возбуждается и данные отправляются, но ничего более...


 
Verg ©   (2004-10-08 05:08) [7]

И не возникнет этот OnRead никогда. Эти компоненты не используют асинхронные режимы winsock.
Для этих компонентов понятие "событие" весьма условно.
Пока сам не вызовешь  Receiveln или ReceiveBuf, никакого OnRead не возникнет. Кроме твоего потока, его просто некому сформировать.

Серверная компонента сама при активизации запускает кодовый поток, который обслуживает слушающий сокет и, при возникновении нового соединения порождает новый кодовый поток для этого соединения (TClientSocketThread). Этот поток и вызывает событие OnAccept.



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-1101798356
IceBeerg
2004-11-30 10:05
2004.12.19
Как установить win98 из winXP (загрузочного компакта нет)


4-1099488416
andrey__
2004-11-03 16:26
2004.12.19
NamedPipe


3-1100675829
Владимир С.
2004-11-17 10:17
2004.12.19
Ничего не понимаю с фильтром


14-1101883869
GanibalLector
2004-12-01 09:51
2004.12.19
Расчет потребности в оборудовании


1-1101998231
denis24
2004-12-02 17:37
2004.12.19
TWordApplication