![]() |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo skyobserver,
Zitat:
Gruß Assertor |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo skyobserver,
probier mal bitte folgendes, um die Beschränkung der RFC 1179 zu umgehen:
Delphi-Quellcode:
Das ist zwar nicht schön und nicht schnell bei vielen Druckaufträgen, sollte aber funktionieren. Sobald dann die ersten Ports in der Range wieder frei werden (die 60-120 Sekunden), wird beim nächsten Auftrag wieder ein kleinerer Port genommen.
IdLPR1.Host := 'brn_906b9b';
IdLPR1.Queue := 'BINARY_P1'; IdLPR1.BoundPortMin := 512; IdLPR1.BoundPortMax := 1024; IdLPR1.BoundPort := IdLPR1.BoundPortMin; while (not IdLPR1.Connected) and (IdLPR1.BoundPort <= IdLPR1.BoundPortMax) do begin try IdLPR1.Connect; except On E: EIdSocketError do begin if E.LastError = 10048 then // Socket already in use... IdLPR1.BoundPort := IdLPR1.BoundPort + 1 else raise; end; On E: Exception do raise; end; end; if IdLPR1.Connected then begin IdLPR1.PrintFile('D:\temp.prn'); IdLPR1.Disconnect; end else ShowMessage('Fehler beim Versenden des Printfiles'); Eine Abbruchmöglichkeit und Fehlerprüfung solltest Du noch einbauen, aber Du hast schonmal eine Idee davon. Edit: Die Exception wirst Du in der IDE trotzdem noch sehen, also bitte entsprechend steuern & testen. Gruß Assertor |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo skyobserver,
Zitat:
Überlass mal Windows die lokale Port Zuweisung, dann solltest Du nicht so schnell als Limit kommen:
Delphi-Quellcode:
Gerade testest, geht auch schnell hintereinander. Ohne die langsamen Exceptions.
IdLPR1.Host := 'brn_906b9b';
IdLPR1.Queue := 'BINARY_P1'; IdLPR1.BoundPortMin := 0; IdLPR1.BoundPortMax := 0; IdLPR1.BoundPort := 0; IdLPR1.Connect; try IdLPR1.PrintFile('meinfile.prn'); finally IdLPR1.Disconnect; end; Hinweis: Das klappt nur, wenn der LPR keine bestimmte Client-Port-Range voraussetzt, wobei dies seit vielen Jahr überlicherweise kein Problem mehr ist. Gruß Assertor |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Zitat:
Hallo, ich habe bisher noch nie was mit der Indy Komponente gearbeitet. Ich habe bei mir die IdLPR Komponente auf Form geklatscht. Bei den Versuch den obigen Code unter Delphi 2007 auszuführen kennt mein Delphi einige Befehle wie z.B."IdLPR1.Host" nicht. Benötigt man dafür noch spezielle Units? Lg, jus |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo,
für diejenigen, wie ich, die verzweifelt diesen Code unter Delphi 2007 nicht zum Laufen gebracht haben, weil die mitgelieferte Indy Komponente viele Befehle wie z.B. "IdLPR1.Host",.... nicht kennt. :wall: Den entscheidenden Hinweis brachte erst nach einer mühsamen Internet Recherche folgendes Forum: ![]() Ich habe erst zum Laufen gebracht, nachdem ich die alte Indy deinstalliert habe und die neueste ![]() :) Lg, jus |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo jus,
Zitat:
Der Vollständigkeit halber: Unter der alten Indy Version gab es m.E. TIdLPR.Connect('Host'), das hätte die Delphi Code-Vervollständigung der IDE anzeigen müssen... Gruß Assertor |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo Assertor,
trotzdem vielen Dank fürs antworten! :) Lg, jus |
Re: Drucken im Netzwerk mit TidLpr: "Socket already in
Hallo,
nachdem ich hier seinerzeit eine Lösung präsentiert hatte, habe ich den Punkt immer mal wieder aufgegriffen und nun zusammen mit Remy Lebeau eine allgemeine Lösung direkt in Indy implementiert. O.g. Lösungsansatz (BoundPortMin und Max auf 0) ist mit neuem SVN also nicht mehr nötig. Problemursache ist, dass trotz Verzicht auf eine Wildcard-IP (BoundIP ist gesetzt) der Windows Socket nicht im Bind(), sondern im Connect() einen Fehler (WSAEADDRINUSE) meldet. Dies entspricht nicht dem Dokumentierten Verhalten aus dem MSDN und ist mal wieder ein Windows-spezifischer Sonderfall :roll: Gruß, Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz