SendCmd()
從服務器讀取你的反應,所以SendCmd()
後,不要打電話,除非GetResponse()
服務器實際發送兩個獨立的響應。
反應通常採取以下形式:
<Response Code> <Optional Text>
當響應代碼是一個數字或文本關鍵字。
如果服務器發送數字響應代碼,處理這樣的:
服務器:
// sends:
//
// 200 1
//
ASender.Reply.SetReply(200, '1');
客戶:
if TCPclient.SendCmd(theMessage) = 200 then
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
或者:
// raises an exception if a non-200 response is received
TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
如果服務器發送te xtual響應代碼,處理這樣的:
服務器:
// sends:
//
// OK 1
//
ASender.Reply.SetReply('OK', '1');
客戶:
if TCPclient.SendCmd(theMessage, '') = 'OK' then
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
或者:
// raises an exception if a non-OK response is received
TCPclient.SendCmd(theMessage, ['OK']);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
響應的可選的文本,如果存在的話,可以在TCPclient.LastCmdResult.Text
屬性中訪問,這是一個TStrings
,因爲它是可能的發送形式多行響應:
<Response Code>-<Optional Text>
<Response Code>-<Optional Text>
...
<Response Code> <Optional Text>
服務器:
// sends:
//
// 200-The value is
// 200 1
//
ASender.Reply.SetReply(200, 'The value is');
ASender.Reply.Text.Add('1');
客戶:
TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text[1]);
您也可以以這種形式的答覆後發送二次多行文本:
<Response Code> <Optional Text>
<Secondary Text>
.
服務器:
// sends:
//
// 200 Data follows
// Hello world
// How are you?
// .
//
ASender.Reply.SetReply(200, 'Data follows');
ASender.Reply.Response.Add('Hello world');
ASender.Reply.Response.Add('How are you?');
客戶:
TCPclient.SendCmd(theMessage, 200);
TCPclient.IOHandler.Capture(SomeTStringsObj);
+1和答案。雷米,非常感謝你帶着這樣一個詳細的答案。我希望它能幫助別人。 – Mawg 2012-04-27 06:28:56