如何在 Delphi 中发送广播消息

Jea*_*sio 2 delphi broadcast

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

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

Jos*_*sir 5

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

发件人

在表单上放置一个TIdUDPClient和一个TButton组件。在OnClick按钮的处理程序上写:

procedure TfrmUDPClient.BroadcastClick(Sender: TObject);
begin
  UDPClient.Broadcast('Test', 8090);
end;
Run Code Online (Sandbox Code Playgroud)

接收者

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;
Run Code Online (Sandbox Code Playgroud)

或者,在更高版本的 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;
Run Code Online (Sandbox Code Playgroud)

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

  • 在 Delphi7 的组件上将 `Active` 和 `BroadcastEnabled` 切换为 `true`! (2认同)