全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1546
推到 Plurk!
推到 Facebook!

求教:使用ClientSocket下载http文件的问题

答題得分者是:malanlk
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-20 15:32:42 IP:60.212.xxx.xxx 未訂閱
代码如下: void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { int i=Socket->ReceiveLength(); int ss=Socket->ReceiveBuf(z,i); FileWrite(hnn1,z,i); if(ss<=0) {return;} } 执行后有时可下载正确数据有时不可,请帮忙!应该如何修改?
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-20 19:15:38 IP:61.219.xxx.xxx 未訂閱
是不是少了個 while 迴圈 啊...    
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
  while (true) {
    int i=Socket->ReceiveLength();
    int ss=Socket->ReceiveBuf(z,i);
    FileWrite(hnn1,z,i);
    if(ss<=0)
      {return;}
  }
}
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-20 20:39:52 IP:60.212.xxx.xxx 未訂閱
谢谢帮忙! 不过…… 加上while后和不加一样,也是有时可以下载到正确数据有时不能,请帮帮忙啊! 谢谢了!
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-20 21:21:16 IP:60.212.xxx.xxx 未訂閱
刚刚用十六进制软件看了,问题好象出在尾端,出问题的文件一般比正确的文件要大几十个字节,应该怎么解决啊,请帮帮忙! 我在.h文件里设置的 void *z[90000];
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-21 01:45:50 IP:61.219.xxx.xxx 未訂閱
這篇看看... http://delphi.ktop.com.tw/topic.php?topic_id=36102 這是 TClientSocket OnRead event Help 的 Note... Non-blocking sockets do not always receive an OnRead event for the last bit of data passed over the connection. When using a non-blocking socket, check for any unread data in the OnDisconnect event to make sure that everything is handled. 在 Non-blocking 模式下不保證所有接收都會發出 OnRead, 還是要在 OnDisconnect 中去檢查是否有遺漏未收的資料 P.S. while 迴圈可以拿掉....
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-21 22:21:19 IP:60.212.xxx.xxx 未訂閱
谢谢!我试试!
系統時間:2024-05-04 19:30:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!