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

IdUDPServer 如何在 OnUDPRead 中, Send 一個字串

尚未結案
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-12 18:45:09 IP:218.166.xxx.xxx 未訂閱
請教: IdUDPClient 可直接用 IdUDPClient.Send('Test'), 但 IdUDPServer 在 OnUDPRead 中, 要送一字串回 Client 但不知 Send 之 參數,不知該如何設定. 謝謝!!
bbtw
一般會員


發表:2
回覆:31
積分:16
註冊:2003-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-13 09:56:07 IP:61.71.xxx.xxx 未訂閱
UDP 的特性是送出資料後就不管的, 因此如果是寫類似DNS Server的功能, 必須自己Receive 時記憶client的IP, 然後使用Send指令送出. TCP才有真正Client連線功能
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-13 20:28:51 IP:218.32.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-13 22:37:24 IP:61.62.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-14 09:20:27 IP:218.163.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-26 13:52:13 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-06 18:53:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!