2010-08-13 2 views
2

내 LAN에 브로드 캐스트 UDP 메시지를 보내려합니다. 응용 프로그램은 클라이언트/서버입니다.델파이에서 브로드 캐스트 메시지를 보내려면 어떻게해야합니까?

사용자 인터페이스를 업데이트하려는 경우, 컴퓨터가 다른 컴퓨터를 업데이트하기 위해 메시지를 보내는 방식입니다. indy UDPServer를 어떻게 사용할 수 있습니까? 감사합니다.

+0

UDP는 신뢰할 수 없습니다. http://en.wikipedia.org/wiki/User_Datagram_Protocol#Comparison_of_UDP_and_TCP - "메시지를 보내면 목적지에 도달 할 것인지 알 수 없으므로 메시지가 사라질 수 있습니다. 승인, 재전송 또는 타임 아웃에 대한 개념은 없습니다. " – mjn

+0

UDP 대신에 스레드의 서버 메시지를 수신하는 TCP 클라이언트 소켓 연결을 사용합니다. 하트 비트 프로토콜을 사용하여 클라이언트 또는 서버 측 단절을 감지 할 수 있습니다. – mjn

답변

3

TIdUDPServer 또는 TIdUDPClient 구성 요소를 만듭니다. 두 가지 모두 정확히 Broadcast 방법이 필요합니다.

+0

자,이 방법에 대한 예제가 있습니까? –

+1

아니요, 아닙니다. 나는 그들을 사용한 적이 없다. 무슨 문제가 있습니까? 브로드 캐스트하려는 문자열 메시지를주고 브로드 캐스트합니다. –

4

두 개의 응용 프로그램을 만듭니다. 하나는 송신자를 나타내고 다른 하나는 수신자를 나타냅니다.

보낸 사람

드롭 양식에 TIdUDPClientTButton 구성 요소입니다. 버튼 쓰기의 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; 

두 응용 프로그램을 모두 테스트하고 단추를 클릭하십시오. 두 개 이상의 "리스너"로 테스트하려면 다른 시스템을 사용해야합니다. 즉 동일한 IP에서 여러 리스너를 실행할 수 없습니다.

+1

실제로 동일한 IP에 둘 이상의 UPD Listener를 가질 수 있습니다. 여기를 참고하십시오. http://stackoverflow.com/questions/2604826/multicast-messages-to-multiple-clients-on-the-same-machine –

+1

스위치' Delphi7의 컴포넌트에서 'Active'와'BroadcastEnabled'를 true로 설정하십시오! –

관련 문제