Announcement

Collapse
No announcement yet.

UDP Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • UDP Server

    Hallo,
    ich möchte mit dem BDS2009 einen einfachen Konsolen-UDP Server
    bauen. Mein Versuch scheitert an der
    Event handler - OnReadEvent zuweisung.

    IdUDPServer1->OnUDPRead = (TUDPReadEvent)IdUDPServer1UDPRead;
    oder
    IdUDPServer1->OnUDPRead = &IdUDPServer1UDPRead;
    oder
    IdUDPServer1->OnUDPRead = IdUDPServer1UDPRead;

    wie muss das aussehen?

    In meinem Beispiel funktioniert das IdUDPClient1->Send problemlos.
    Auch wenn ich die Anwendung auf einer Form erstelle "OnUDPRead"-Event
    über den ObjektInspektor zuweise funktioniert alles auch gut. Aber...ich muss
    ohne TForms auskommen.
    HILFE!

    #ifndef __MYDLL_H
    #define __MYDLL_H

    #include "IdUDPServer.hpp"
    #include "IdUDPClient.hpp"

    TIdUDPClient *IdUDPClient1;
    TIdUDPServer *IdUDPServer1;

    #endif
    ------------------------------------------------------------------
    #include <vcl.h>
    #include <iostream>
    #pragma hdrstop

    #include <tchar.h>
    #include "main.h"
    using namespace std;
    #pragma argsused

    void __fastcall IdUDPServer1UDPRead(TIdUDPListenerThread *AThread, TBytes AData,
    TIdSocketHandle *ABinding)
    {
    cout << StringOf(AData).c_str() << endl;
    }


    int _tmain(int argc, _TCHAR* argv[])
    {
    try {
    IdUDPClient1 = new TIdUDPClient(NULL);
    IdUDPClient1->Host = "192.168.2.57";
    IdUDPClient1->Port = 2001;
    IdUDPClient1->Active=true;
    try {
    IdUDPClient1->Connect();
    } catch (EIdException &error) {
    cout << error.Message.c_str() << endl;
    }
    IdUDPClient1->Send("Hallo");

    IdUDPServer1 = new TIdUDPServer(NULL);
    IdUDPServer1->BroadcastEnabled=false;
    IdUDPServer1->BufferSize=8192;
    IdUDPServer1->DefaultPort = 2001;
    IdUDPServer1->IPVersion=Id_IPv4;
    IdUDPServer1->ThreadedEvent=false;
    IdUDPServer1->Active=true;
    IdUDPServer1->OnUDPRead = (TUDPReadEvent)IdUDPServer1UDPRead;

    } catch (EIdException &error) {
    cout << error.Message.c_str() << endl;
    }
    return 0;
    }
    //---------------------------------------------------------------------------

  • #2
    UDPServer1->OnUDPRead=UDPServer1UDPRead;

    Und der Prototyp:
    void __fastcall UDPServer1UDPRead(TIdUDPListenerThread *AThread, TBytes AData, TIdSocketHandle *ABinding);

    Übrigens:
    Der neue C++Builder XE (und Delphi XE) baut da auch Käse:
    https://forums.embarcadero.com/threa...ssageID=292974

    Ich habs gefixt, in dem ich TArray<System.Byte> durch TBytes substituiert habe.

    Gruß, Bodo

    Comment

    Working...
    X