| Autor | 
Beitrag | 
Udontknow 
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Di 03.08.04 16:45 
 
Die Komponenten TSimpleUDPClient und TSimpleUDPServer in dieser Unit sind, ebenfalls wie SimpleTCP, Wrapperkomponenten der jeweiligen Indy-Pendants. Durch die Einführung eines Clientlesethreads und eines OnInput-Events wird die Handhabung der UDP-Komponenten vereinfacht.
 
																	1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453:
  				 | 									unit SimpleUDP;
 
 
 
 
 
 
 
 
 
  interface
  uses SysUtils, Classes, IdUDPClient, idUDPServer, IdUDPBase, idSocketHandle;
  type TCommand=Integer;
  const coData:TCommand=0;
  const coDisconnect:TCommand=-1;
 
  type   TidSocketHandle=idSocketHandle.TidSocketHandle;
      TSimpleUDPClient=class;
    TProcessCommandEvent=procedure(Command:Integer; Stream:TStream) of object;   THandleInputEvent=procedure(Sender:TObject;Stream:TStream) of object;   TServerHandleInputEvent=procedure(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle) of object;
    TClientThread=class(TThread)   private     function GetOnProcessCommand: TProcessCommandEvent;     procedure SetOnProcessCommand(const Value: TProcessCommandEvent);     function GetClient: TidUDPClient;     procedure SetClient(const Value: TidUDPClient);   protected     FCommand:Integer;     FStream:TMemoryStream;     FClient:TidUDPClient;     FOnProcessCommand:TProcessCommandEvent;     procedure HandleProcessCommand; virtual;   public     procedure Execute; override;   published     property OnProcessCommand:TProcessCommandEvent read GetOnProcessCommand Write SetOnProcessCommand;     property Client:TidUDPClient read GetClient write SetClient; end;
    TSimpleUDPClient=class(TComponent)   private     FClient:TidUDPClient;     FThread:TClientThread;     FOnInput:THandleInputEvent;     function GetOnInput: THandleInputEvent;     procedure SetOnInput(const Value: THandleInputEvent);     function GetActive: Boolean;     function GetBufferSize: Integer;     function GetHost: String;     function GetPort: Integer;     procedure SetActive(const Value: Boolean);     procedure SetBufferSize(const Value: Integer);     procedure SetHost(const Value: String);     procedure SetPort(const Value: Integer);   protected     procedure ProcessCommand(Command:Integer; Stream:TStream); virtual;     procedure SendCommand(Command:Integer; Stream:TStream); virtual;   public     constructor Create(AOwner:TComponent); override;     destructor Destroy; override;
      procedure SendStream(AStream:TStream);
    published     property OnInput:THandleInputEvent read GetOnInput write SetOnInput;     property BufferSize:Integer read GetBufferSize write SetBufferSize;     property Host:String read GetHost write SetHost;     property Port:Integer read GetPort write SetPort;     property Active:Boolean read GetActive write SetActive;   end;
    TSimpleUDPServer=class(TComponent)   private     FOnInput:TServerHandleInputEvent;     function GetActive: Boolean;     function GetBufferSize: Integer;     function GetOnInput: TServerHandleInputEvent;     function GetPort: Integer;     procedure SetActive(const Value: Boolean);     procedure SetBufferSize(const Value: Integer);     procedure SetOnInput(const Value: TServerHandleInputEvent);     procedure SetPort(const Value: Integer);     procedure UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);   protected     FServer:TidUDPServer;     procedure ProcessCommand(Binding:TIdSocketHandle; Command:Integer; Stream:TStream); virtual;     procedure SendCommand(PeerIP:String;PeerPort:Integer;Command:Integer; Stream:TStream); virtual;   public     constructor Create(AOwner:TComponent); override;     destructor Destroy; override;   published     property OnInput:TServerHandleInputEvent read GetOnInput write SetOnInput;     property BufferSize:Integer read GetBufferSize write SetBufferSize;     property Port:Integer read GetPort write SetPort;     property Active:Boolean read GetActive write SetActive;
    end;
 
  procedure Register;
  implementation
  procedure Register; begin   RegisterComponents('Simple Network',[TSimpleUDPClient,TSimpleUDPServer]); end;
 
 
 
 
  constructor TSimpleUDPClient.Create(AOwner: TComponent); begin   inherited;   FClient:=TidUDPClient.Create(Self);   FThread:=TClientThread.Create(True);   FThread.FClient:=FClient;   FThread.FOnProcessCommand:=ProcessCommand;   FThread.Resume; end;
  destructor TSimpleUDPClient.Destroy; begin   FThread.Free;   inherited; end;
  procedure TClientThread.Execute; var BytesRead, BytesToRead:Integer; var Ptr:Pointer; begin   Ptr:=NIL;   Getmem(Ptr,FClient.BufferSize);   try     While not Terminated do     begin       if (not FClient.Active) then       begin         sleep(40);         Continue;       end;
        try         BytesRead:=FClient.ReceiveBuffer(Ptr^,FClient.BufferSize,20);
          if BytesRead>0 then         begin           FCommand:=Integer(Ptr^);           BytesToRead:=Integer(Pointer(Integer(Ptr)+4)^);           if BytestoRead>FClient.BufferSize-4 then             raise Exception.Create('data size exceeds packet size!');
            FStream:=TMemoryStream.Create;           try             FStream.Size:=BytesToRead;             Move(Pointer(Integer(Ptr)+8)^,FStream.Memory^,BytesToRead);             FStream.Position:=0;             Synchronize(HandleProcessCommand);           finally             FStream.Free;           end;         end;
        except       end;     end;   finally     FreeMem(Ptr);   end; end;
  function TClientThread.GetClient: TidUDPClient; begin   Result:=FClient; end;
  function TClientThread.GetOnProcessCommand: TProcessCommandEvent; begin   Result:=FOnProcessCommand; end;
  procedure TClientThread.HandleProcessCommand; begin   if Assigned(FOnProcessCommand) then     FOnProcessCommand(FCommand,FStream); end;
  procedure TClientThread.SetClient(const Value: TidUDPClient); begin   FClient:=Value; end;
  procedure TClientThread.SetOnProcessCommand(   const Value: TProcessCommandEvent); begin   FOnProcessCommand:=Value; end;
  function TSimpleUDPClient.GetActive: Boolean; begin   Result:=FClient.Active; end;
  function TSimpleUDPClient.GetBufferSize: Integer; begin   Result:=FClient.BufferSize; end;
  function TSimpleUDPClient.GetHost: String; begin   Result:=FClient.Host; end;
  function TSimpleUDPClient.GetOnInput: THandleInputEvent; begin   Result:=FOnInput; end;
  function TSimpleUDPClient.GetPort: Integer; begin   Result:=FClient.Port; end;
  procedure TSimpleUDPClient.ProcessCommand(Command: Integer;   Stream: TStream); begin   if (Command=coData) and (Assigned(FOnInput)) then     FOnInput(Self,Stream); end;
  procedure TSimpleUDPClient.SendCommand(Command: Integer; Stream: TStream); var BufferPtr:Pointer; begin   if Stream.Size>BufferSize-8 then     raise Exception.Create('Data size exceeds buffer size!');   Stream.Position:=0;   Getmem(BufferPtr,Stream.Size+8);   try         Integer(BufferPtr^):=Command;         Integer(Pointer(Integer(BufferPtr)+4)^):=Stream.Size;         Stream.ReadBuffer(Pointer(Integer(BufferPtr)+8)^,Stream.Size);         FClient.SendBuffer(BufferPtr^,Stream.Size+8);   finally     FreeMem(BufferPtr);   end; end;
  procedure TSimpleUDPClient.SendStream(AStream: TStream); begin   SendCommand(CoData,AStream); end;
  procedure TSimpleUDPClient.SetActive(const Value: Boolean); begin   FClient.Active:=Value; end;
  procedure TSimpleUDPClient.SetBufferSize(const Value: Integer); begin   FClient.BufferSize:=Value; end;
  procedure TSimpleUDPClient.SetHost(const Value: String); begin   FClient.Host:=Value; end;
  procedure TSimpleUDPClient.SetOnInput(const Value: THandleInputEvent); begin   FOnInput:=Value; end;
  procedure TSimpleUDPClient.SetPort(const Value: Integer); begin   FClient.Port:=Value; end;
 
 
  constructor TSimpleUDPServer.Create(AOwner: TComponent); begin   inherited;   FServer:=TidUdpServer.Create(Self);   FServer.OnUDPRead:=UDPRead; end;
  destructor TSimpleUDPServer.Destroy; begin   FServer.Free;   inherited; end;
  function TSimpleUDPServer.GetActive: Boolean; begin   Result:=FServer.Active; end;
  function TSimpleUDPServer.GetBufferSize: Integer; begin   Result:=FServer.BufferSize; end;
  function TSimpleUDPServer.GetOnInput: TServerHandleInputEvent; begin   Result:=FOnInput; end;
  function TSimpleUDPServer.GetPort: Integer; begin   Result:=FServer.DefaultPort; end;
  procedure TSimpleUDPServer.ProcessCommand(Binding: TIdSocketHandle;   Command: Integer; Stream: TStream); begin   if (Command=coData) and (Assigned(FOnInput)) then     FOnInput(Self,Stream,Binding); end;
  procedure TSimpleUDPServer.SendCommand(PeerIP: String; PeerPort,   Command: Integer; Stream: TStream); var BufferPtr:Pointer; begin   if Stream.Size>BufferSize-8 then     raise Exception.Create('Data size exceeds buffer size!');   Stream.Position:=0;   Getmem(BufferPtr,Stream.Size+8);   try         Integer(BufferPtr^):=Command;         Integer(Pointer(Integer(BufferPtr)+4)^):=Stream.Size;         Stream.ReadBuffer(Pointer(Integer(BufferPtr)+8)^,Stream.Size);         FServer.SendBuffer(PeerIP,PeerPort,BufferPtr^,Stream.Size+8);   finally     FreeMem(BufferPtr);   end; end;
  procedure TSimpleUDPServer.SetActive(const Value: Boolean); begin   FServer.Active:=Value; end;
  procedure TSimpleUDPServer.SetBufferSize(const Value: Integer); begin   FServer.Buffersize:=Value; end;
  procedure TSimpleUDPServer.SetOnInput(   const Value: TServerHandleInputEvent); begin   FOnInput:=Value; end;
  procedure TSimpleUDPServer.SetPort(const Value: Integer); begin   FServer.DefaultPort:=Value; end;
  procedure TSimpleUDPServer.UDPRead(Sender: TObject; AData: TStream;   ABinding: TIdSocketHandle); var BytesToRead:Integer; var Command:integer; var Stream:TMemoryStream; begin   AData.ReadBuffer(Command,SizeOf(Command));   AData.ReadBuffer(BytesToRead,SizeOf(BytesToRead));
    if BytesToRead<>AData.Size-8 then     raise Exception.Create('data size does not represent packet size!');
    Stream:=TMemoryStream.Create;   try     Stream.CopyFrom(AData,BytesToRead);     Stream.Position:=0;     ProcessCommand(ABinding,Command,Stream);   finally     Stream.Free;   end; end;
  end.					 				 | 			 		 	   
 
  Zuletzt bearbeitet von Udontknow am Mi 24.11.04 08:54, insgesamt 2-mal bearbeitet
 | 
 | 
matze 
        
 
Beiträge: 4613 
Erhaltene Danke: 24 
 
XP home, prof 
Delphi 2009 Prof, 
 | 
Verfasst: Mi 04.08.04 07:09 
 
wow cool. also mich muss schon mal sagen: diese warapper klasse von dir sind echt gut, dadurch kann man sich bei kleinen projekten einen haufen zeit sparen ! 
_________________ In the beginning was the word. 
 And the word was content-type: text/plain.
  
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mi 04.08.04 07:52 
 
Danke.     
Cu,
 Udontknow  
 
 | 
 | 
Elite 
Ehemaliges Mitglied
 
Erhaltene Danke: 1 
 
 
 
 | 
Verfasst: Mo 04.10.04 11:44 
 
Hab ne generelle Frage zum Installieren der Komponenten:
 
 Ist es richtig, wenn ich
 1. Quelltext als neue Unit speichere?
 2. Komponente -> Koponente installieren
 3. in neues Package 
 
 Oder sollte ich ein vorhandenes Package nehmen? Kann ich die compilierte exe trotz zusätzlichem Package weiter geben? 
 
 | 
 | 
BenBE 
        
 
Beiträge: 8721 
Erhaltene Danke: 191 
 
Win95, Win98SE, Win2K, WinXP 
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0 
 | 
Verfasst: Mo 04.10.04 12:10 
 
Ist so richti.
 In welchem Package du die Unit speicherst ist egal, da das nur für Delphi* interessant ist.
 
 * Außer du nutzt Laufziet-Packages, da du in diesem Fall das Laufzeitpackage weitergeben müsstest. 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
 Ich code EdgeMonkey - In dubio pro Setting. 
 
 | 
 | 
Elite 
Ehemaliges Mitglied
 
Erhaltene Danke: 1 
 
 
 
 | 
Verfasst: Mo 04.10.04 14:38 
 
Sooo,
 äußerlich gefallen mir die Kompos sehr   
Sieht alles sehr übersichtlich und einfach aus mit Stream senden und empfangen.
 Nur leider bekomme ich das gute Stück nicht zum funktionieren. Hiermein bisheriger Code, in dem einfach 2 integers vom Client zum Server geschickt werden (sollen):
 																	1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
  				 | 									procedure TForm1.Sende2IntegersClick(Sender: TObject); var   a,b: integer; begin   a:=strtoint(Edit1.Text);   b:=strtoint(Edit2.Text);   Stream := TMemoryStream.Create;   try     With Stream do     begin       Write(a,4);       Write(b,4);     end;     UdpClient1.SendStream(Stream);   finally     Stream.Free;   end; end;
  procedure TForm1.UDPServer1Input(Sender: TObject; AData: TStream;   ABinding: TIdSocketHandle); var   a,b:integer; begin   with stream do   begin     read(a,4);     read(b,4);   end;   Edit3.Text := inttostr(a);   Edit4.Text := inttostr(b); end;					 				 | 			 		 	  
Bei beiden ist Active auf true und beim Client habe ich als IP 127.0.0.1 (müsste localhost sein) eingegeben. Auch der Port stimmt überein. Es wird keine Exception ausgelöst, sondern die Daten von Edit1 und 2 werden einfach nicht nach Edi3 und 4 übernommen.
 Was mache ich falsch?
 Edit:Fehler gefunden!
 Hab in der zweiten Prozedur Stream(global) statt AData verwendet.  
 
  Zuletzt bearbeitet von Elite am Mo 04.10.04 14:56, insgesamt 1-mal bearbeitet
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mo 04.10.04 14:54 
 
Wie wäre es, wenn du "AData" anstatt die globale Variable "Stream" benutzt?        
		                                                          Delphi-Quelltext                                	 															1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
  				 | 									procedure TForm1.UDPServer1Input(Sender: TObject; AData: TStream;   ABinding: TIdSocketHandle); var   a,b:integer; begin   with Adata do   begin     read(a,4);     read(b,4);   end;   Edit3.Text := inttostr(a);   Edit4.Text := inttostr(b); end;					 				 | 			 		 	  
Das ist einer der Gründe, warum man nie unnötigerweise globale Variablen anlegen sollte, packe die Stream-Deklaration in die Sende-Prozedur.
 Cu,
 Udontknow  
 
 | 
 | 
Elite 
Ehemaliges Mitglied
 
Erhaltene Danke: 1 
 
 
 
 | 
Verfasst: Mo 04.10.04 14:58 
 
lol, ich sollte mir angewöhnen die Seite neu zu laden, bevor ich poste ^^
 Aber trotzdem schönen Dank. Find die Kompos echt klasse. Damit kann ich ja praktisch jede x-beliebige Netzwerkkommunikation einfach realisieren.
 
 *UDontKnow ganz dick lobt* 
 
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mo 04.10.04 15:04 
 
Danke fürs Lob.     
Cu,
 Udontknow  
 
 | 
 | 
Elite 
Ehemaliges Mitglied
 
Erhaltene Danke: 1 
 
 
 
 | 
Verfasst: Mo 04.10.04 15:46 
 
kann ich denn damit auch broadcasts senden oder muss ich erst herausfinden, was die netzwerkspezifische broadcast-ip ist? 
 
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mo 04.10.04 16:08 
 
Die Komponenten richten sich aus an dem typischen Client-Server-Betrieb, da UDP-Broadcasting  im Internet nichts bringt. 
 
 Schau dir doch auch mal die SimpleNetworkGame-Unit an, dort habe ich die TCP- und die UDP-Komponenten miteinander verflochten, sodaß über die Verbindungsliste des Servers ein "Broadcast" möglich wäre.
 
 Cu,
 Udontknow 
 
 | 
 | 
Elite 
Ehemaliges Mitglied
 
Erhaltene Danke: 1 
 
 
 
 | 
Verfasst: Mo 04.10.04 16:16 
 
Ich will sie aber für lan nutzen, weshalb Broadcast mich durchaus weiter bringen würde.
 Habe eben versucht mit einer normalen TidudpClient einen Integer zu senden, der dann von deinem SimpleUDPServer empfangen werden sollte. Hat nicht hingehauen? Funktionieren sollte es schon oder? 
 
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mo 04.10.04 16:34 
 
Die SimpleUDP-Komponenten erwarten grundsätzlich folgenden Paket-Aufbau:
 
 1. Kommando vom Typ Integer. In der eigentlich UDP-Komponente wird nur coData (0) weiterverarbeitet, durch Übersteuerung von ProcessCommand kann man weitere Befehle implementieren.
 
 2. Anzahl an Bytes der folgenden Datenmenge im Paket als Integer.
 
 3. Die eigentlichen Daten.
 
 Wenn du also ein Integer sendest, muß das Paket aus 12 Byte bestehen: [codata,4,Zahl]
 
 Cu,
 Udontknow 
 
 | 
 | 
Florian H 
        
 
Beiträge: 52 
 
Win XP 
D6 Pro 
 | 
Verfasst: Do 18.11.04 16:56 
 
hm, wenn ich die Unit installieren will, kommt die Meldung  	  | Zitat: | 	 		  | [Fataler Fehler] SimpleUDP.pas(51): 'Never-build' Package 'IndySystem60' muß neu compiliert werden | 	  
und wie mache ich das??  
 
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Do 18.11.04 17:10 
 
Hallo!
 
Tut mir leid, aber die Meldung habe ich so noch nie gesehen. Ich habe die Komponenten mit Delphi 7 entwickelt, aber wenn sich die Schnittstellen nicht verändert haben, sollte das auch klappen...    
Edit : So ein Paket habe ich bei mir gar nicht, evtl musst du mal deine Indy-Komponenten updaten.
 www.indyproject.org/...load/Files/Indy9.iwp
Edit2:       Unbedingt den Hinweis "Delphi 6 & 7 Specific Notes" beachten!
 Cu,
 Udontknow  
 
 | 
 | 
Florian H 
        
 
Beiträge: 52 
 
Win XP 
D6 Pro 
 | 
Verfasst: Do 18.11.04 18:33 
 
hi,
 
 ansich hab ich die INDY's bei meiner Delphi6-Installation vor ein paar Wochen extra weggelassen und dafür die aktuelle 9er- (oder doch 10er?!?)-Version der INDYs genommen... egal, ich versuchs nochmal mit V9.18 
 
 | 
 | 
Stefan-W 
        
 
Beiträge: 475 
 
Win 7 SP1 
D2005 PE 
 | 
Verfasst: Di 23.11.04 17:28 
 
Hi
 
erstmal großes Lob, die Unit gefällt mir sehr...
 nur leider bekomm ich immer ein Fehler und ich weis nicht woran es liegt (bin nicht der Schlauste auf dem Gebiet)
 	  | Delphi 7 hat folgendes geschrieben: | 	 		  | [Fehler] Unit1.pas(25): Undefinierter Bezeichner: 'TIdSocketHandle' | 	  
in der Zeile steht das hier
 	  | Zitat: | 	 		  | Procedure SimpleUDPServer1Input(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); | 	  
ich hoffe mir kann noch geholfen werden...     
Schon mal danke
 EDIT: Ich habs gefunden! Mir fehlt die idSocketHandle.pas oder idSocketHandle.dcu, nun brauch ich nur noch ne Lösung...
 Edit2: Also die Datei hab ich doch aber das Problem besteht weiter...
 Tschau  
 
 | 
 | 
Udontknow   
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Di 23.11.04 17:44 
 
Hmmm... Hast du den Bibliothekspfad um das Indy-Source-Verzeichnis ergänzt? Siehe Tools\Umgebungsoptionen\Bibliothek.
 
 Cu,
 Udontknow 
 
 | 
 | 
Raphael O. 
        
 
Beiträge: 1596 
 
 
VS 2013 
 | 
Verfasst: Di 23.11.04 17:44 
 
die Indy-DCU-Dateien müssen in einem Ordner liegen, der auch als Suchpfad eingegeben ist... 
 
 | 
 | 
Stefan-W 
        
 
Beiträge: 475 
 
Win 7 SP1 
D2005 PE 
 | 
Verfasst: Di 23.11.04 17:48 
 
ist alles, hab ich schon kontrolliert.
 
 kann es an der Version liegen? Hab 9.0.14 
 
 | 
 |