⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.pas

📁 flash视频源码 flash视频源码
💻 PAS
字号:
unit server;

interface

uses Classes, WinSock;

type TServer = class(TThread)
      private
       { Private-Deklarationen }
       sockaddr:TSockAddr;
      protected
       procedure Execute; override;
      public
       AdminServer:Boolean;
       Socket:TSocket;
       constructor Create(Port:Word;BindTo:string;AdminServer:Boolean);
       procedure Shutdown;
     end;

var LastError:Integer;

implementation

{ Wichtig: Methoden und Eigenschaften eines Objekts in der VCL
           k鰊nen nur in einem Methodenaufruf mit SYNCHRONIZE
           genutzt werden, z.B.

      Synchronize(UpdateCaption);

  und UpdateCaption k鰊nte sein,

    procedure TServer.UpdateCaption;
    begin
      Form1.Caption := 'Updated in einem Thread';
    end; }

{ TServer }

uses SysUtils, misc, abstuser, actuser, admuser;

constructor TServer.Create(Port:Word;BindTo:string;AdminServer:Boolean);
  begin
    FreeOnTerminate:=true;
    Priority:=tpLower;

    Socket:=WinSock.socket(PF_INET,SOCK_STREAM,0);
    if Socket=INVALID_SOCKET then
      begin
        LastError:=WSAGetLastError;
        Abort;
      end;

    sockaddr.sin_family:=AF_INET;
    sockaddr.sin_port:=htons(Port);
    sockaddr.sin_addr.S_addr:=INADDR_ANY;
    if BindTo<>'*' then sockaddr.sin_addr.S_addr:=inet_addr(PChar(BindTo));

    if bind(Socket,sockaddr,sosa)=SOCKET_ERROR then
      begin
        LastError:=WSAGetLastError;
        Abort;
      end;

    if listen(Socket,5)=SOCKET_ERROR then
      begin
        LastError:=WSAGetLastError;
        Abort;
      end;

    self.AdminServer:=AdminServer;

    inherited Create(false);
  end;

procedure TServer.Execute;
var newuser:TUser;Typ:string;
  begin
    { Plazieren Sie den Thread code hier }
//    if AdminServer then Typ:='[Administration Server]' else Typ:='[Chat Server]';
//    Writeln(Typ,' Trying to start the server.');

    if AdminServer=false then MakeSystemRooms;

//    Writeln(Typ,' Server is listening on port ',ListenOnPort);
    repeat
      if AdminServer=false then newuser:=TActUser.Create else newuser:=TAdmUser.Create;
      newuser.Socket:=accept(Socket,sockaddr,sosa);
      newuser.IP:=sockaddr.sin_addr;
      if newuser.Socket=INVALID_SOCKET then
        begin
          if Terminated=false then Writeln('An error occured while accepting a connection (Code ',WSAGetLastError,').');
          newuser.Free;
        end else newuser.Resume;
    until Terminated;
    Writeln('Server has been shutdown');
  end;

procedure TServer.Shutdown;
  begin
    Terminate;
    CloseSock(Socket);
  end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -