Indy TCPClient接收訊息錯誤 |
答題得分者是:RaynorPao
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
//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 發送簡訊給我 |
引言://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 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |