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

Indy TCPClient接收訊息錯誤

答題得分者是:RaynorPao
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-15 23:21:18 IP:140.118.xxx.xxx 未訂閱
//Server
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
   AnsiString szCommand=AThread->Connection->ReadLn();  //接收來自Client的訊息,這部份是正確的
   AnsiString remote_ip=szCommand;
   remote_ip=remote_ip.SubString(szCommand.Pos("[IP]") 4,szCommand.Length()-szCommand.Pos("[IP]")-3);
   int index=1;
   AThread->Connection->Write("[Index]" IntToStr(index));
   //將Index值傳給Client,這裡我只是大略寫出來,本來應該是依照不同的Client給予不同的Index
}    //Client
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(IdTCPClient1->Connected())
    {
       try
       {
          if(IdTCPClient1->ReadLn().Pos("[Index]")!=0)  //無法接收,都會有TimeOut錯誤              {
             ShowMessage(IdTCPClient1->ReadLn());
          }
       }
       __finally
       {
          //delete ms1;
       }
    }
}
我嘗試搜尋過站上的文章,有看到一篇是使用ReadLnWait,但是仍然不行,是我的Client事件寫錯地方嗎?請問該怎麼做才能正常的接收資料?謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-02 14:22:13 IP:202.3.xxx.xxx 未訂閱
引言:
//Server
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
   AnsiString szCommand=AThread->Connection->ReadLn();  //接收來自Client的訊息,這部份是正確的
   AnsiString remote_ip=szCommand;
   remote_ip=remote_ip.SubString(szCommand.Pos("[IP]")+4,szCommand.Length()-szCommand.Pos("[IP]")-3);
   int index=1;
   AThread->Connection->Write("[Index]"+IntToStr(index));
   //將Index值傳給Client,這裡我只是大略寫出來,本來應該是依照不同的Client給予不同的Index
}    //Client
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(IdTCPClient1->Connected())
    {
       try
       {
          if(IdTCPClient1->ReadLn().Pos("[Index]")!=0)  //無法接收,都會有TimeOut錯誤              {
             ShowMessage(IdTCPClient1->ReadLn());
          }
       }
       __finally
       {
          //delete ms1;
       }
    }
}
我嘗試搜尋過站上的文章,有看到一篇是使用ReadLnWait,但是仍然不行,是我的Client事件寫錯地方嗎?請問該怎麼做才能正常的接收資料?謝謝
GGL 你好:
請參考以下的範例程式碼:
// Server
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
   AnsiString szCmd=AThread->Connection->ReadLn();
   AnsiString szIP=AThread->Connection->Socket->Binding->PeerIP;
   int index=1;
   AThread->Connection->WriteLn("[Index]"+IntToStr(index));
}    // Client
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdTCPClient1->Host="127.0.0.1";
   IdTCPClient1->Port=4000;
   IdTCPClient1->Connect(3000);
   IdTCPClient1->WriteLn("abc");
   AnsiString szCmd=IdTCPClient1->ReadLnWait(3000);
   ShowMessage(szCmd);
   IdTCPClient1->Disconnect();
}
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-03-29 20:18:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!