http协议下,如何不间断接受数据

caier 2004-10-25 09:24:04
http协议下,客户端申请连接,连接成功后,
服务器会不停的给客户端发数据,
客户端如何自动接受不间断的数据呢?
也就是说客户端只发一次请求,然后一直等待服务器的数据,发现数据就作相应处理。
...全文
359 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2004-10-27
  • 打赏
  • 举报
回复



procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
IdHTTP1.ProtocolVersion:=pv1_1;
s:=IdHTTP1.Get('http://www.csdn.net/Images/logo_csdn.gif');//执行完后,连接并未断开。
//但这要看服务器支不支持了。
Memo1.Lines.Add(s);

try
while IdHTTP1.Connected do
begin
Memo1.Lines.Add(IdHTTP1.ReadLn);//只是示例,
//具体你后面读的数据该怎么接收,就是你自己的事了。
//ReadBuffer ,ReadInteger ,ReadLn ,ReadLnWait

Application.ProcessMessages;//用了IdAntiFreeze1,这句其实没什么用。。
end;
except
IdHTTP1.Disconnect;
end;
end;
myy 2004-10-26
  • 打赏
  • 举报
回复
要求不高,用TTimer也可以,若担心处理时间长可以这样写:

...Timer1Time(Sender : TObject);

begin
try
Timer1.Enabled:=False; //先停掉

//请求、处理数据 ...

finally
Timer1.Enabled:=True; //开启
end;
end;
halfdream 2004-10-26
  • 打赏
  • 举报
回复
用INDY控件做倒是比较简单的。。

按我先说的那样要求,你发出请求后,就用一个循环不断的READ来接收数据。
当然,最好你独立开个线程这样,或者你就在主线程使用TIdAntiFreeze也勉强可以
caier 2004-10-26
  • 打赏
  • 举报
回复
caier 2004-10-26
  • 打赏
  • 举报
回复
to halfdream(哈欠)

发请求是不是用这个 IdHTTP1.get(url,Rcv);
然后循环不断接收数据。从那read啊???
灯草拐杖 2004-10-25
  • 打赏
  • 举报
回复
用TIME做不好,还是用线程做比较好
halfdream 2004-10-25
  • 打赏
  • 举报
回复
我想应该可以的。。客户端SOCKET采用非阻塞方式,
客户端先按HTTP/1.1发一个GET请求,带上参数Connection: Keep-Alive
这样WEB服务器就会保持这个连接.
剩下的事情不用多说了吧
netcha 2004-10-25
  • 打赏
  • 举报
回复
用定时器,每秒启动一个线程去取。希望不要太久,最好 能在0,1秒内完成。否,则,会最后处理不过来
masterjames 2004-10-25
  • 打赏
  • 举报
回复
HTTP是无状态的,实时从设备取数据,最好不用HTTP(这个设计不怎么好),不如用SOCKET,象QQ一样,如果一定要用HTTP,最好在客户端使用定时器,每多少秒取一次数据
caier 2004-10-25
  • 打赏
  • 举报
回复
服务器是实时从设备取数据并发给客户端。
客户端要实时显示这些数据。
所以客户端只请求一次,然后等待数据并处理,直到客户端关闭
caier 2004-10-25
  • 打赏
  • 举报
回复
to phoenixsharp
用delphi如何做呢?我是新手,多谢了?
phoenixsharp 2004-10-25
  • 打赏
  • 举报
回复
但是不知楼主具体是怎么搞的,无状态连接一般都是GET一回,返回一下,然后断开,再请求,再返回..不解.....?
phoenixsharp 2004-10-25
  • 打赏
  • 举报
回复
如果是HTTP协议的话:
客户端主动GET服务器,服务器响应并返回数据,客户端是自动接收的,只要连接不断就应该收得到.
chengchong1979 2004-10-25
  • 打赏
  • 举报
回复
楼上的,用线程怎么做啊
xieyongxiang 2004-10-25
  • 打赏
  • 举报
回复
发一次请求只能得一次的数据!
楼主你可以用定时器啊,也可以用线程啊,这就可以啦
phoenixsharp 2004-10-25
  • 打赏
  • 举报
回复
你这种情况用HTTP不是太现实.用SOCKET吧,INDY系列都可以,怎么方便怎么用.
caier 2004-10-25
  • 打赏
  • 举报
回复
ding
caier 2004-10-25
  • 打赏
  • 举报
回复
to halfdream(哈欠):
用delphi7如何做啊,indy控件行吗?

1,594

社区成员

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

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