irvinehing
初階會員
發表:77 回覆:79 積分:31 註冊:2003-11-12
發送簡訊給我
|
請教各位大哥,小弟利用IdTCPClient送一個訊息給IdTCPServer,經過IdTCPServer運算過後,會回傳一個訊息給IdTCPClient。
請問如何得知IdTCPServer有回傳訊息給IdTCPClient?
小弟在while迴圈內用IdTCPClient->ReadLn()來抓,但是程式會hang住。
|
pwipwi
版主
發表:68 回覆:629 積分:349 註冊:2004-04-08
發送簡訊給我
|
引言:
請教各位大哥,小弟利用IdTCPClient送一個訊息給IdTCPServer,經過IdTCPServer運算過後,會回傳一個訊息給IdTCPClient。
請問如何得知IdTCPServer有回傳訊息給IdTCPClient?
小弟在while迴圈內用IdTCPClient->ReadLn()來抓,但是程式會hang住。
用IdTCPClient->ReadLnWait()也會有同樣的問題嗎?
|
irvinehing
初階會員
發表:77 回覆:79 積分:31 註冊:2003-11-12
發送簡訊給我
|
還是會有同樣的問題,下面是我的程式碼,請幫忙我看一下!
//--------------------------------------------------------------------------- #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
發送簡訊給我
|
參考了下列文章,改一改程式碼就可以了!
但不知還會有啥問題!
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);
}
}
}
|