procedure TUDPMainForm.SendButtonClick(Sender: TObject)
var
MessageID: Integer
ThisMessage: String
ReceivedString: String
begin
MessageID := Random(MAXINT)
ThisMessage := 'Message: ' + IntToStr(MessageID)
UDPMemo.Lines.Add('Sending ' + ThisMessage)
UDPClient.Send(ThisMessage)
ReceivedString := UDPClient.ReceiveString() //该方法取得由服务端返回的信息。
if ReceivedString = '' then
UDPMemo.Lines.Add('No response received from the server after ' + IntToStr(UDPClient.ReceiveTimeout) + ' millseconds.')
else
UDPMemo.Lines.Add('Received: ' + ReceivedString)
end
Server端:
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObjectAData: TStreamABinding: TIdSocketHandle)
var
DataStringStream: TStringStream
s: String
begin
DataStringStream := TStringStream.Create('')
try
DataStringStream.CopyFrom(AData, AData.Size)
UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort))
s := 'Replied from ' + UDPServer.LocalName + ' to "' + DataStringStream.DataString + '"'
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s))
finally
DataStringStream.Free
end
TIdUDPServer控件用来实现一个UDP服务器
所在单元
IdUDPServer
属性
property Bindings: TIdSocketHandles
用来收集f TIdSocketHandle实例。包含ID_SOCK_DGRAM类型的socket。
property DefaultPort: integer
监听新连接的端口。
property ThreadedEvent: boolean
指示UDP读事件的执行方式。是否以线程的形式执行
property Active: Boolean
是否开始监听。
property Binding: TIdSocketHandle
只读属性。指示读写传送的socket句柄。
property BroadcastEnabled: Boolean
是否广播传送数据。
property BufferSize: Integer
UDP包的尺寸。
property ReceiveTimeout: Integer
从一个服务中读取数据的超时时间。
property LocalName: string
本地计算机名称。
property Version: string
只读属性,用来获取Indy部件的版本号码。
方法
procedure Broadcast(const AData: stringconst APort: integer)
在网络上发送数据到所有的计算机。
unction ReceiveBuffer(var ABufferconst ABufferSize: Integerconst AMSec: Integer =
IdTimeoutDefault): integeroverload
function ReceiveBuffer(var ABufferconst ABufferSize: Integervar VPeerIP: stringvar
VPeerPort: integerAMSec: Integer = IdTimeoutDefault): integeroverload
从远程连接中读取数据
function ReceiveString(const AMSec: Integer = IdTimeoutDefault): stringoverload
function ReceiveString(var VPeerIP: stringvar VPeerPort: integerconst AMSec: Integer =
IdTimeoutDefault): stringoverload
从远程连接中读取数据
procedure Send(AHost: stringconst APort: Integerconst AData: string)
向远程计算机系统发送数据。
procedure SendBuffer(AHost: stringconst APort: Integervar ABufferconst AByteCount:
integer)
向远程计算机系统发送数据
事件
property OnUDPRead: TUDPReadEvent
UDP读取事件发生时执行。
参数
ABinding
接受UDP数据报的socket。
AData
在UDP数据报中接受数据的流。
property OnStatus: TIdStatusEvent
指示当前连接状态的句柄。
参数
aaArgs
用来构造当前状态文本消息的格式化参数。
axStatus
当前连接状态。取值范围与TIdUDPClient类中的OnStatus事件相同。
procedure BeginWork(AWorkMode: TWorkModeconst ASize: Integer = 0)virtual
当OnBeginWork事件触发时执行
AWorkMode可以取的值:
wmRead--从远程连接中读取数据。
wmWrite-- 向远程连接发送数据。
procedure DoWork(AWorkMode: TWorkModeconst ACount: Integer)virtual
当OnWork事件触发时执行。
procedure EndWork(AWorkMode: TWorkMode)virtual
当OnEndWork事件触发时执行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)