NMDayTim.pas
上传用户:szzdds
上传日期:2013-09-18
资源大小:293k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit NMDayTim;
  2. {$X+}
  3. {$R-}
  4. {$IFDEF VER100}
  5. {$DEFINE NMF3}
  6. {$ENDIF}
  7. {$IFDEF VER110}
  8. {$DEFINE NMF3}
  9. {$ENDIF}
  10. {$IFDEF VER120}
  11. {$DEFINE NMF3}
  12. {$ENDIF}
  13. {$IFDEF VER125}
  14. {$DEFINE NMF3}
  15. {$ENDIF}
  16. interface
  17. uses
  18.   SysUtils, Classes, Forms, Psock, Winsock, NMConst;
  19. {$IFDEF VER110}
  20. {$OBJEXPORTALL On}
  21. {$ENDIF}
  22. {$IFDEF VER120}
  23. {$OBJEXPORTALL On}
  24. {$ENDIF}
  25. {$IFDEF VER125}
  26. {$OBJEXPORTALL On}
  27. {$ENDIF}
  28. //  CompName='TNMdayTim';
  29. //  Major_Version='4';
  30. //  Minor_Version='02';
  31. //  Date_Version='012798';
  32. type
  33.   TNMDayTime = class(TPowerSock)
  34.   private
  35.     function GetTimeStr: string;
  36.   protected
  37.     { Protected declarations }
  38.   public
  39.     constructor Create(AOwner: TComponent); override;
  40.     property DayTimeStr: string read GetTimeStr;
  41.   published
  42.   end;
  43. implementation
  44. constructor TNMDayTime.Create(AOwner: TComponent);
  45. begin
  46.   inherited Create(AOwner);
  47.   Port := 13;
  48.   TimeOut := 500;
  49. end;
  50. function TNMDayTime.GetTimeStr: string;
  51. var i, ct: integer;
  52.   handled: boolean;
  53. begin
  54.   BeenCanceled := FALSE; {Turn Canceled off}
  55.   if FConnected then {If already connected raise exception}
  56.     raise ESockError.Create(sPSk_Cons_msg_Conn);
  57.   ct := 0;
  58.   repeat
  59.     try
  60.       ResolveRemoteHost; {Resolve the IP address of remote host}
  61.     except
  62.       on E: ESockError do
  63.         if (E.Message = sPSk_Cons_msg_host_to) or (E.Message = sPSk_Cons_msg_host_Can) then raise;
  64.     end;
  65.     if RemoteAddress.sin_addr.S_addr = 0 then
  66.       if ct > 0 then raise ESockError.Create(sPSk_Cons_msg_add_null) {If Resolving failed raise exception}
  67.       else
  68.         if not Assigned(OnInvalidHost) then raise ESockError.Create(sPSk_Cons_msg_add_null)
  69.         else
  70.         begin
  71.           handled := FALSE;
  72.           OnInvalidHost(handled);
  73.           if not handled then raise ESockError.Create(sPSk_Cons_msg_add_null); {If Resolving failed raise exception}
  74.           ct := ct + 1;
  75.         end;
  76.   until RemoteAddress.sin_addr.S_addr <> 0;
  77.   StatusMessage(Status_Debug, sPSk_Cons_msg_Conning); {Inform Status}
  78.   RemoteAddress.sin_family := AF_INET; {Make connected true}
  79. {$R-}
  80.   if Proxy = '' then
  81.     RemoteAddress.sin_port := htons(Port) {If no proxy get port from Port property}
  82.   else
  83.     RemoteAddress.sin_port := htons(ProxyPort); {else get port from ProxyPort property}
  84. {$R+}
  85.   i := SizeOf(RemoteAddress); {i := size of remoteaddress structure}
  86.   {Connect to remote host}
  87.   succeed := FALSE;
  88.   Timedout := FALSE;
  89.   TimerOn;
  90.   Winsock.Connect(ThisSocket, RemoteAddress, i);
  91.   repeat
  92.     application.processmessages; {Process messages till response received}
  93.   until succeed or Timedout; {Responce received,  Timed out or Cancelled exits loop}
  94.   TimerOff;
  95.   if Timedout then raise Exception.Create(Cons_Msg_ConnectionTimedOut);
  96.   try
  97.     while not DataAvailable do
  98.       application.processmessages;
  99.     Result := Read(0);
  100.   finally
  101.     Disconnect;
  102.   end;
  103. end;
  104. end.