Delphi:Scktsrvr.exe的源程序
来源:优易学  2011-9-10 17:54:02   【优易学:中国教育考试门户网】   资料下载   IT书店

  读一读Scktsrvr.exe的源程序使用DELPHI做多层开发的朋友们都应该对Scktsrvr.exe这个程序不陌生的,Borland公司在DELPHI中给出了它的源代码。这是一个900来行的程序,程序不算长,现在我只选其中部分仔细读一读。走的线路大致是,从服务器接到客户端连接,处理客户端的一个请求(这儿选了客户端向服务器发出的\'取应用服务器列表\'请求)服务器接受了客户端连接后,因为ServerSocket采用的是阻塞模式,服务器执行了下面这个线程来服务客户端:
  //SCKTMAIN.PAS
  procedure TSocketDispatcherThread.ClientExecute;
  var
  Data: IDataBlock;
  msg: TMsg;
  Obj: ISendDataBlock;
  Event: THandle;
  WaitTime: DWord;
  begin
  CoInitialize(nil); //初始化COM
  try
  Synchronize(AddClient); //在程序界面上显示客户信息,
  //用同步保证AddClient线程安全性
  FTransport := CreateServerTransport;
  try
  Event := FTransport.GetWaitEvent;
  PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE);
  GetInterface(ISendDataBlock, Obj);
  if FRegisteredOnly then
  FInterpreter := TDataBlockInterpreter.Create(Obj, SSockets) else
  FInterpreter := TDataBlockInterpreter.Create(Obj, \');
  try
  Obj := nil;
  if FTimeout = 0 then
  WaitTime := INFINITE else
  WaitTime := 60000;
  while not Terminated and FTransport.Connected do
  try
  case MsgWaitForMultipleObjects(1, Event, False, WaitTime, QS_ALLEVENTS) of
  //MsgWaitForMultipleObjects保持线程同步之用,
  //本文暂不细说它.
  WAIT_OBJECT_0: //有数据来了
  begin
  WSAResetEvent(Event);
  Data := FTransport.Receive(False, 0); //从客户端接收数据块
  if Assigned(Data) then
  begin
  FLastActivity := Now;
  FInterpreter.InterpretData(Data);//下面接着分析这儿
  Data := nil;
  FLastActivity := Now;
  end;
  end;
  WAIT_OBJECT_0 + 1:
  while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
  DispatchMessage(msg);
  WAIT_TIMEOUT:
  if (FTimeout > 0) and ((Now - FLastActivity) > FTimeout) then
  FTransport.Connected := False;
  end;
  except
  FTransport.Connected := False;
  end;

 finally
  FInterpreter.Free;
  FInterpreter := nil;
  end;
  finally
  FTransport := nil;
  end;
  finally
  CoUninitialize;
  Synchronize(RemoveClient);
  end;
  end;
  就这么舒舒服服的六十来行。
  除开那些流程控制的语句,我们主要看到两个东西:
  数据传输(FTransport) 和 数据解析(FInterpreter)。
  在本文中,我更感兴趣的是它的应用协议的实现,数据传输(FTransport)就先扔在一边,以后再看了.现在我们就来看看它的数据解析部分。

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训