idtcpserver如何主动向idtcpclient发送一条数据

fbiboss 2009-04-03 11:57:10
INDY10中idtcpserver如何主动向idtcpclient发送一条数据
另外如果idtcpserver有多个客户端的话,怎么设置这条数据是发给哪个客户端啊?
...全文
576 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fbiboss 2009-04-03
  • 打赏
  • 举报
回复
procedure TtextTcpClient.execute;
var
temp:string;
begin
form1.Memo1.Lines.Add(''); //为什么加上这句就可以了??
while (not textClient.Terminated) and (Form1.IdTCPClient1.Connected) do
begin
temp:=form1.IdTCPClient1.IOHandler.ReadLn;
form1.Memo1.Lines.Add(temp);
//Synchronize(IOinput); //而且这个也没什么用啊
end;
end;
fbiboss 2009-04-03
  • 打赏
  • 举报
回复
还是不行啊,全部代码就是下面这些

发送改成这样:ConnContext.Connection.IOHandler.WriteLn('start');




unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient,idcontext, StdCtrls;

type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
IdAntiFreeze1: TIdAntiFreeze;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

TtextTcpClient=class(TThread)
private
temp_string:string;
procedure IOinput;
public
procedure execute;override;
end;
var
Form1: TForm1;
textClient:TtextTcpClient;


implementation

{$R *.dfm}
procedure TtextTcpClient.IOinput;
var
temp:string;
begin
temp:=temp_string;
end;
procedure TtextTcpClient.execute;
var
temp:string;
begin
while (not textClient.Terminated) and (Form1.IdTCPClient1.Connected) do
begin
temp:=#13+#10;
temp:=Form1.IdTCPClient1.Socket.ReadLn('', 10);
form1.Memo1.Lines.Add(temp);
Synchronize(IOinput);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
try
IdTCPClient1.Host:= '127.0.0.1';
IdTCPClient1.Port:=8899;
if not IdTCPClient1.Connected then
begin
textClient:=TtextTcpClient.Create(true);
textClient.FreeOnTerminate:=True;
textClient.Resume;
IdTCPClient1.Connect;
end;
except

end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdTCPClient1.Disconnect;
end;

end.
僵哥 2009-04-03
  • 打赏
  • 举报
回复
客户端使用的是ReadLn,那服务端也用WriteLN
fbiboss 2009-04-03
  • 打赏
  • 举报
回复
知道怎么判断客户端了,但是还是不会接收服务端主动发出去的这条消息
fbiboss 2009-04-03
  • 打赏
  • 举报
回复
谢谢,但是客户端怎么读取呢?我用了网上找的这个代码读不到啊
另外如果有多个客户端怎么办啊?能知道是发给哪个客户端吗?

TtextTcpClient=class(TThread)
private
temp_string:string;
procedure IOinput;
public
procedure execute;override;
end;
var
Form1: TForm1;
textClient:TtextTcpClient;


implementation

{$R *.dfm}
procedure TtextTcpClient.IOinput;
var
temp:string;
begin
temp:=temp_string;
end;
procedure TtextTcpClient.execute;
var
temp:string;
begin
while (not textClient.Terminated) and (Form1.IdTCPClient1.Connected) do
begin
temp:=#13+#10;
Form1.IdTCPClient1.Socket.ReadLn(temp);
showmessage(temp);
Synchronize(IOinput);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
try
IdTCPClient1.Host:= '127.0.0.1';
IdTCPClient1.Port:=8899;
if not IdTCPClient1.Connected then
begin
textClient:=TtextTcpClient.Create(true);
textClient.FreeOnTerminate:=True;
textClient.Resume;
IdTCPClient1.Connect;
end;
except

end;

end;
僵哥 2009-04-03
  • 打赏
  • 举报
回复
var
I: Integer;
ConnContext: TIdContext;
begin
with IdTCPServer1.Contexts.LockList do
try
for I := 0 to Count - 1 do begin
ConnContext := TIdContext(Items[I]);
ConnContext.Connection.IOHandler.Write(...);
end;
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧