全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3969
推到 Plurk!
推到 Facebook!

Indy 10 TidTCPClient問題(中華電信簡訊發送程式)

缺席
kate1240
一般會員


發表:2
回覆:1
積分:0
註冊:2008-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-27 15:59:54 IP:210.64.xxx.xxx 訂閱
拜讀mine的大作(改寫中華電信簡訊發送程式)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=59068
mine是以Indy 9的TidTCPClient為基礎
在下測試Indy10的TidTCPClient時,作法又完全不同了
以下是Indy 9之程式碼

[code delphi]
procedure TForm1.Button5Click(Sender: TObject);
var
Msgpos:Integer;
begin
Try
if IdTCPClient1.Connected=False then begin
IdTCPClient1.Host:=Trim(Edit1.Text);
IdTCPClient1.Port:=StrToInt(Edit2.Text);
IdTCPClient1.Connect(900);
end;
except
ShowMessage('無法連線,請檢查設定是否正確?');
Exit;
end;
Msgpos:=0;
SendMsg.interface_type:=INTERFACE_TYPE;
SendMsg.msg_type:=0;
Msgpos:=Length(strcopy(@SendMsg.msg_content[Msgpos],Pchar(Trim(Edit3.Text)))) 1;
Msgpos:=MSgpos Length(strcopy(@SendMsg.msg_content[Msgpos],Pchar(Trim(Edit4.Text)))) 1;
IdTCPClient1.Socket.Send(SendMsg,Sizeof(SendMsg));
IdTCPClient1.Socket.Recv(RetMsg,Sizeof(RetMsg));
ShowMessage(StrPas(RetMsg.ret_deforbiddenion));
if RetMsg.ret_code=0 then
Showmessage('已登入')
else
IdTCPClient1.Disconnect;
FillChar(SendMsg.msg_content,Sizeof(SendMsg.msg_content),0);
end;
[/code]

測試Indy 10已沒有Send/Recv的寫法
改寫程式如下

[code delphi]
procedure TAirMsg01f.msg_login;
var ccc,ddd:TidBytes;
fff :string;
begin
Msgpos:=0;
SendMsg.interface_type := INTERFACE_TYPE;
SendMsg.msg_type:=0; // 登入 0 : 帳號/密碼檢查
Msgpos:=Length(strcopy(@SendMsg.msg_content[Msgpos],Pchar(id_no))) 1;
Msgpos:=MSgpos Length(strcopy(@SendMsg.msg_content[Msgpos],Pchar(paswd))) 1;

ccc:=RawTOBytes(SendMsg,sizeof(SendMsg));
try
IdTCPClient1.Socket.Write(ccc);
IdTCPClient1.Socket.ReadBytes(ddd,Sizeof(RetMsg));
BytesToRaw(ddd,RetMsg,sizeof(RetMsg));
except
end;

//IdTCPClient1.Socket.Send(SendMsg,Sizeof(SendMsg));
//IdTCPClient1.Socket.Recv(RetMsg,Sizeof(RetMsg));

L_Status.Caption := StrPas(RetMsg.ret_description);
if RetMsg.ret_code = 0 then
L_Status.Caption :='已登入'
else IdTCPClient1.Disconnect;
FillChar(SendMsg.msg_content,Sizeof(SendMsg.msg_content),0);
end;

[/code]

問題出現在此:
透過IdTCPClient1.Socket.Write(ccc)已可成功將簡訊資料發送至中華電信端
但中華電信回傳的資料(發送狀態)卻無法透過
IdTCPClient1.Socket.ReadBytes(ddd,Sizeof(RetMsg))傳送回來
測試發現,若連發兩次簡訊,才會收到一次回傳(並且一次回傳兩筆)
想請各位前輩是否有此問題解決方法?
或是這是Indy 10的Bug?
懇請各位高手解答了!!
系統時間:2024-04-20 16:32:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!