客户端代码:
procedure Treceivemsg.Execute ;
begin
while not terminated do
begin
if form1.IdTCPClient1.Connected then
begin
msg:=form1.IdTCPClient1.ReadLn;
form1.memo1.Text:=msg+#10+form1.memo1.text;
sleep(100)
end;
end;
end;
服务器端代码:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
i : Integer;
begin
try
with IdTCPServer1.Threads.LockList do
for I := 0 to Count - 1 do
begin
AThread := Items[I];
if AThread.Connection.Socket.Binding.PeerIP = 'hostname' then
AThread.Connection.WriteLn('ok');
end;
finally
IdTCPServer1.Threads.UnlockList;
end;
end;
现在问题是,服务端可以正常接受每个客户端发来的信息。但当服务器端向客户端发送信息时,客户端接收不到信息???这是怎么回事???盼复。。谢谢
procedure Treceivemsg.Execute ;
begin
while not terminated do
begin
if form1.IdTCPClient1.Connected then
begin
msg:=form1.IdTCPClient1.ReadLn;
form1.memo1.Text:=msg+#10+form1.memo1.text;
sleep(100)
end;
end;
end;
服务器端代码:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
i : Integer;
begin
try
with IdTCPServer1.Threads.LockList do
for I := 0 to Count - 1 do
begin
AThread := Items[I];
if AThread.Connection.Socket.Binding.PeerIP = 'hostname' then
AThread.Connection.WriteLn('ok');
end;
finally
IdTCPServer1.Threads.UnlockList;
end;
end;
现在问题是,服务端可以正常接受每个客户端发来的信息。但当服务器端向客户端发送信息时,客户端接收不到信息???这是怎么回事???盼复。。谢谢
解决方案 »
- 100分求救——如何用简单循环代码控制多个SpeedButton的点击事件?
- 如何得到用户的词库?!求一个非常简单的程序!
- 一个有关线程的问题,有编过多线程程序的高手请帮忙
- 关于表记录的插入问题?(初学者)
- 如何解决delphi中用table控件打开有多个blob字段的表出错的问题?
- 我编写的CORBA为何总是提示"File not found 'OrbPas.dcu'"
- ClientDataSet中TWideStringField字段过滤中文问题
- 两个ADOQUERY控件如何能互相访问
- 关于TStringList问题!!!
- 我是否可以在一个unit中创建非可视的TADOConnection对象?
- FastReport小问题
- 请教组件问题??
procedure Tfrm_wwwifc_main.BitBtn2Click(Sender: TObject);
var
s:string;
temp:char;
begin
s:='GI'+'|'+'RN'+guestinfo.gbefroom+'|'+'GN'+guestinfo.gname+'|'+'PW'+guestinfo.gpassword+'|';
busy:=true;
IdTCPClient1.Write(chr(2)+s+chr(3));
//sleep(1000);
temp:=IdTCPClient1.ReadChar;
if temp=chr(6) then
memo1.lines.Add(formatdatetime('YYYY-MM-DD HH:MM:SS',now)+'发送'+guestinfo.gname+'\'+guestinfo.gbefroom+'的入住请求成功');
busy:=false;
end;//temp:=IdTCPClient1.ReadChar;
// if temp=chr(6) then
// memo1.lines.Add(formatdatetime('YYYY-MM-DD HH:MM:SS',now)+'发送'+guestinfo.gname+'\'+guestinfo.gbefroom+'的入住请求成功');
这样刚发送完就接收可以接收到服务器的数据。
但我的程序的服务器端只允许一个线程和它通信。UP UP 学习中
if AThread.Connection.Socket.Binding.PeerIP = 'hostname' then
我试着输出了AThread.Connection.Socket.Binding.PeerIP后,结果显示是每个客户端的IP。但是这句话却判断是否等于hostname,那么当然不等于了。我去掉后,每个客户端就可以同时收到信息了。但是不知道些这段代码的人为何要加上这句话还有一个问题,现在虽然每个客户向服务器端发送数据,服务端和每个客户端都可以同时接收到。但我刚才进行了如下测试:
在每个客户端发送事件里,写入了一个循环,让每次点击发送信息时,客户端一次性向服务器端发送100次信息。但是当两个客户端一同向服务器一次性发送100条信息时,两个客户端就会出现掉线问题。然后再也连接不上服务器了。这是怎么回事?
服务器端会不定时的发数据过来。我不知道
怎么监听服务器端是否发了数据过来。idTCPclient,只有有限的以下事件:
onconnecting;onstatus;onwork;workbegin;workend;
没有onreving这样的事件,我怎么监听到服务有数据过来,再去缓冲区去读呀。