Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Delphi中发送广播消息_Delphi_Broadcast - Fatal编程技术网

如何在Delphi中发送广播消息

如何在Delphi中发送广播消息,delphi,broadcast,Delphi,Broadcast,我想在我的局域网中发送广播UDP消息,应用程序是客户机/服务器 我希望更新用户界面,这样任何计算机都可以发送消息来更新其他计算机。 我可以使用UDPServer indy吗?如何使用? 谢谢创建TIdUDPServer或TIdUDPClient组件。两者都有广播方法,可以完全满足您的需要。创建两个应用程序,一个代表发送方,另一个代表接收方 发件人 在表单上删除一个TIdUDPClient和一个t按钮组件。在按钮的OnClick处理程序上写入: procedure TfrmUDPClient.Br

我想在我的局域网中发送广播UDP消息,应用程序是客户机/服务器

我希望更新用户界面,这样任何计算机都可以发送消息来更新其他计算机。 我可以使用UDPServer indy吗?如何使用?
谢谢

创建
TIdUDPServer
TIdUDPClient
组件。两者都有
广播
方法,可以完全满足您的需要。

创建两个应用程序,一个代表发送方,另一个代表接收方

发件人 在表单上删除一个
TIdUDPClient
和一个
t按钮
组件。在按钮的
OnClick
处理程序上写入:

procedure TfrmUDPClient.BroadcastClick(Sender: TObject);
begin
  UDPClient.Broadcast('Test', 8090);
end;
接受者 在表单上放置一个
TIdUDPServer
,为其定义相同的端口(8090),并将其添加到
OnUDPRead
处理程序:

procedure TfrmUDPServer.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  Msg: String;
begin
  DataStringStream := TStringStream.Create('');
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    Msg := DataStringStream.DataString;
  finally
    DataStringStream.Free;
  end;
  ShowMessage(Msg);
end;
或者,在Indy的更高版本中:

procedure TfrmUDPServer.UDPServerUDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
var
  Msg: String;
begin
  try
    {if you actually sent a string encoded in utf-8}
    Msg := TEncoding.UTF8.GetString(AData);
  except
  end;

  ShowMessage(Msg);
end;

要进行测试,请运行两个应用程序并单击按钮。要使用两个或多个“侦听器”进行测试,您必须使用另一台机器。也就是说,您不能在同一IP上运行多个侦听器。

好的,您有关于这种方法的示例吗?没有。我从来没用过。你有什么麻烦?你给它你想要广播的字符串消息,它就会广播它。实际上,你可以在同一个ip上有多个UPD侦听器,请参见此处在Delphi7中的组件上切换
活动的
广播启用的
真的
!此外,只有在设置绑定后,才应将
Active
设置为
true
!请注意,UDP不可靠-请参阅-“当发送消息时,无法知道消息是否会到达目的地;消息可能会在发送过程中丢失。没有确认、重新传输或超时的概念。”我将使用TCP客户端套接字连接来代替UDP,该连接在线程中侦听服务器消息。心跳协议可用于检测客户端或服务器端断开连接。