Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#12

Re: Drucken im Netzwerk mit TidLpr: "Socket already in

  Alt 9. Jan 2010, 18:04
Hallo skyobserver,

probier mal bitte folgendes, um die Beschränkung der RFC 1179 zu umgehen:

Delphi-Quellcode:
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');
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.

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
Frederik
  Mit Zitat antworten Zitat