2010-08-13 4 views
2

Je souhaite envoyer un message de diffusion UDP dans mon réseau local, l'application est client/serveur.Comment envoyer un message de diffusion en Delphi?

Je souhaite mettre à jour l'interface utilisateur, de cette façon n'importe quel ordinateur envoie un message pour mettre à jour les autres. Puis-je utiliser UDPServer indy, comment utiliser? Merci

+0

Notez que UDP n'est pas fiable - voir http://en.wikipedia.org/wiki/User_Datagram_Protocol#Comparison_of_UDP_and_TCP - "Lorsqu'un message est envoyé, on ne peut pas savoir s'il arrivera à destination, il pourrait se perdre le long du Il n'y a pas de concept de reconnaissance, de retransmission ou de timeout. " – mjn

+0

Au lieu de UDP j'utiliserais une connexion de socket client TCP qui écoute les messages du serveur dans un thread. Un protocole de pulsation peut être utilisé pour détecter la déconnexion côté client ou serveur. – mjn

Répondre

3

Créez un composant TIdUDPServer ou TIdUDPClient. Les deux ont Broadcast méthodes qui devraient faire exactement ce dont vous avez besoin.

+0

Ok, avez-vous un exemple de cette méthode? –

+1

Non, je ne le fais pas. Je ne les ai jamais utilisés. Quel problème avez-vous? Vous lui donnez le message chaîne que vous voulez diffuser et il le diffuse. –

4

Créez deux applications, l'une représentant l'expéditeur et l'autre le destinataire.

Auteur

déposer une TIdUDPClient et un composant TButton sur votre formulaire. Sur le gestionnaire OnClick du bouton d'écriture:

procedure TfrmUDPClient.BroadcastClick(Sender: TObject); 
begin 
    UDPClient.Broadcast('Test', 8090); 
end; 

Récepteur

déposer une TIdUDPServer sur votre formulaire, définissez le même port (8090) pour elle et l'ajouter au gestionnaire 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; 

Pour tester les deux applications et cliquez sur le bouton. Pour tester avec deux «auditeurs» ou plus, vous devez utiliser une autre machine, c'est-à-dire que vous ne pouvez pas exécuter plusieurs écouteurs sur la même adresse IP.

+1

Vous pouvez réellement avoir plus d'un UPD Listeners sur la même adresse IP, voir ici http://stackoverflow.com/questions/2604826/multicast-messages-to-multiple-clients-on-the-same-machine –

+1

Commutateur ' Active' et 'BroadcastEnabled' à' true' sur les composants de Delphi7! –

Questions connexes