Indy 10 TidTCPClient問題(中華電信簡訊發送程式) |
缺席
|
kate1240
一般會員 ![]() ![]() 發表:2 回覆:1 積分:0 註冊:2008-05-26 發送簡訊給我 |
拜讀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? 懇請各位高手解答了!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |