idTcpClient用什么方法监听服务器端发过来的消息 ( 积分: 100 )

  • 主题发起人 主题发起人 windtake
  • 开始时间 开始时间
W

windtake

Unregistered / Unconfirmed
GUEST, unregistred user!
IdTcpClient好像没有一个事件是收到消息的时候触发的,要怎么时时监听服务器端发过来的消息呢。谢谢!而且IdtcpClient好像也不能实时发送检查连接的信息要自己用timer吗?请各位不吝赐教~
 
IdTcpClient好像没有一个事件是收到消息的时候触发的,要怎么时时监听服务器端发过来的消息呢。谢谢!而且IdtcpClient好像也不能实时发送检查连接的信息要自己用timer吗?请各位不吝赐教~
 
有没有搞错,连个看的人都没有?大家帮帮忙啊~~
 
这是Indy自带的例子中的片段
//get selected image in listbox from server
procedure TfrmClient.btnGetSelectedImageClick(Sender: TObject);
var
ftmpStream : TFileStream;
begin
Try
if lstAvailableImages.itemindex = -1 then
MessageDlg('Cannot proceed until you select an image from the list !', mtInformation, [mbOK], 0)
else
with IdTCPClient do
begin
if connected then DisConnect;
Host := edtServerHost.text;
Port := StrToInt(edtServerPort.text);
Connect;
WriteLn('PIC:' + lstAvailableImages.Items[lstAvailableImages.itemindex]);
// delete if exists
// in production situation you might store binary downloads like this in a cache folder
if FileExists(ExtractFileDir(ParamStr(0)) + '/' + lstAvailableImages.Items[lstAvailableImages.itemindex]) then
DeleteFile(ExtractFileDir(ParamStr(0)) + '/' + lstAvailableImages.Items[lstAvailableImages.itemindex]);
ftmpStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + '/' + lstAvailableImages.Items[lstAvailableImages.itemindex],fmCreate);
while connected do
ReadStream(fTmpStream,-1,true);
FreeAndNil(fTmpStream);
Disconnect;
imgMain.Picture.LoadFromFile(ExtractFileDir(ParamStr(0)) + '/' + lstAvailableImages.Items[lstAvailableImages.itemindex]);
end;
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
 
我做的是长连接,而且已经自己定义了包的结构。如果用
while connected do
ReadStream(fTmpStream,-1,true);
那我怎么继续发信息出去,怎么判断包是那种类型
 
都过了一夜了,怎么还是没有人来回答。麻烦各位大哥了,~~~
 
怎么还是没有反应阿,再顶一下。高手帮忙~顺便再问个问题
我定义一个record是这样的
TRcd=record packed
RcdLen:integer;
RcdContent:array [0...RcdLen-1] of char;
end;
但这样是不行的,要怎么定义才能使RcdContent的长度是RcdLen
 
1. 怎么时时监听服务器端发过来的消息?
开个线程/timer

2.
const
RcdLen=100;//RcdLen 必须是const,不能用变量
type
TRcd=packed record
RcdLen:integer;
RcdContent:array [0..RcdLen-1] of char;
end;
 
后退
顶部