線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1524
推到 Plurk!
推到 Facebook!

(Indy)請問如何得知IdTCPServer有回傳訊息給IdTCPClient?

答題得分者是:pwipwi
irvinehing
初階會員


發表:77
回覆:79
積分:31
註冊:2003-11-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-13 17:30:17 IP:202.174.xxx.xxx 未訂閱
請教各位大哥,小弟利用IdTCPClient送一個訊息給IdTCPServer,經過IdTCPServer運算過後,會回傳一個訊息給IdTCPClient。 請問如何得知IdTCPServer有回傳訊息給IdTCPClient? 小弟在while迴圈內用IdTCPClient->ReadLn()來抓,但是程式會hang住。
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-14 01:43:53 IP:211.76.xxx.xxx 未訂閱
引言: 請教各位大哥,小弟利用IdTCPClient送一個訊息給IdTCPServer,經過IdTCPServer運算過後,會回傳一個訊息給IdTCPClient。 請問如何得知IdTCPServer有回傳訊息給IdTCPClient? 小弟在while迴圈內用IdTCPClient->ReadLn()來抓,但是程式會hang住。
用IdTCPClient->ReadLnWait()也會有同樣的問題嗎?
irvinehing
初階會員


發表:77
回覆:79
積分:31
註冊:2003-11-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-14 09:58:40 IP:202.174.xxx.xxx 未訂閱
還是會有同樣的問題,下面是我的程式碼,請幫忙我看一下!    
 
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
        AnsiString cmd = AThread->Connection->ReadLn();
        Memo1->Lines->Add(cmd);            if(cmd == "111")
        {
                AThread->Connection->WriteLn("222");
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
        try
        {
                IdTCPClient1->Host = "localhost";
                IdTCPClient1->Port = 4000;
                IdTCPClient1->Connect(3000);
                Memo2->Lines->Add("Connect!");
        }
        catch(Exception &e)
        {
                Memo2->Lines->Add("Fail!");
                return;
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
        try
        {
                IdTCPServer1->DefaultPort = 4000;
                IdTCPServer1->Active = true;
                Memo1->Lines->Add("Active!");
        }
        catch(Exception &e)
        {
                Memo1->Lines->Add("Fail!");
                return;
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button3Click(TObject *Sender)
{
        try
        {
                IdTCPClient1->Disconnect();
                Memo2->Lines->Add("Disconnect!");
        }
        catch(Exception &e)
        {
                Memo2->Lines->Add("Fail!");
                return;
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button4Click(TObject *Sender)
{
        try
        {
                IdTCPClient1->WriteLn("111");
                Memo2->Lines->Add("Success!");
        }
        catch(Exception &e)
        {
                Memo2->Lines->Add("Fail!");
                return;
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        if(IdTCPClient1->Connected())
        {
                AnsiString cmd = IdTCPClient1->ReadLnWait();
                Memo2->Lines->Add(cmd);
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button5Click(TObject *Sender)
{
        if(IdTCPClient1->Connected())
        {
                AnsiString cmd = IdTCPClient1->ReadLnWait();
                Memo2->Lines->Add(cmd);
        }
}
//---------------------------------------------------------------------------
irvinehing
初階會員


發表:77
回覆:79
積分:31
註冊:2003-11-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-14 10:27:49 IP:202.174.xxx.xxx 未訂閱
參考了下列文章,改一改程式碼就可以了! 但不知還會有啥問題! http://delphi.ktop.com.tw/topic.php?topic_id=47549
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        if(IdTCPClient1->Connected())
        {
                IdTCPClient1->ReadFromStack(false, 1, false);
                while(IdTCPClient1->InputBuffer->Size > 0)
                {
                        AnsiString cmd = IdTCPClient1->ReadLnWait();
                        Memo2->Lines->Add(cmd);
                }
        }
}
系統時間:2024-05-13 20:29:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!