IdUDPServer 如何在 OnUDPRead 中, Send 一個字串 |
尚未結案
|
Wawa
一般會員 ![]() ![]() 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
|
bbtw
一般會員 ![]() ![]() 發表:2 回覆:31 積分:16 註冊:2003-07-11 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
Wawa 你好: 參考看看:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); var s : string; begin s := 'reply'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s)); end;PS. 記得要 use IdSocketHandle unit 喔. |
Wawa
一般會員 ![]() ![]() 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
Mickey 謝謝你的回答, 總算有人回答令人滿意的方法.
我在 Indy 的 Demo 程式中有看到與你所回答相同的範例.
但有2 個問題, 我在 Demo 程式中沒看到較為簡便的方法,
可否再請教你呢? 1.IdUDPClient 元件沒有像 IdUDPServer 元件之 OnUDPRead 事件,
所以由 IdUDPServer Send 到 IdUDPClient 端 的Message, 沒有
event 來接收,需由類似下列的程式來接收,即 IdUDPClient Send
or Broadcast 後, 馬上要由
Repeat IdUDPClient1.ReceiveString();... Until 來處理
我覺得什分不便, 也不安全, 因 IdUDPClient 的 ReceiveTimeout
時間要設長一點, 否則當 IdUDPClient 是 Broadcast 後, IdUDPClient
自己來不及接收, 設太長時間, 效益又不好, 這也是我很不喜歡用 Indy 的
原因, 功能雖強, 但不好用, 不知 Indy 的 IdUDPClient,可有較好的方法來
接收資料嗎? 如果沒有可否有其他好用的元件且能適用於 Delphi 5 ~7 or 8?
IdUDPClient1.Send(s);
repeat
s:=IdUDPClient1.ReceiveString();
until s = '';
2.IdUDPServer 如何送 TMemoryStream 的資料到 IdUDPClient 端,
又 IdUDPClient 端如何接收此資料呢? 再此先謝謝你了, 我一直找不到好用又可適用於 D5 到 D7或 D8 的 UDPClient,
UDPServer 的好元件.
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
Wawa 你好:
1. 其實 UDPClient 也可以 Send 後, 不再 Repeat until ReceiveString='', 就是, 送出後就不管, 像 Window API "postmessage" 一樣, 不等到 Server response, 繼續執行後續之程序. 2. Client 並沒有 "Listen" 的功能, 也就是說, Client 只能 request. 以下 Code 是 Client Send 一個 File, 參考看看, 希望有幫助: procedure TFmMsgr.SendBinary(FileName : string); var b: array of byte; M : TMemoryStream; Fn : string; begin fn := ExtractFileName(FileName); M := TMemoryStream.Create; try M.LoadFromFile(FileName); SetLength(b,M.Size); M.Position := 0; M.Read(b[0],M.size); MySendBuffer(HostList.Items.Names[HostList.ItemIndex],b[0],High(b) 1); finally M.Free; end; end;HostList is TListBox. MySendBuffer 只是 Call UDPClient.SendBuffer |
Ktop_Robot
站務副站長 ![]() ![]() 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |