读一读Scktsrvr.exe的源程序计算机等级考试

文章作者 100test 发表时间 2010:01:01 09:30:01
来源 100Test.Com百考试题网


  读一读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

相关文章


Delphi命令行参数计算机等级考试
怎样修改windows里的开始按钮的位图计算机等级考试
再谈多态:向上映射及VMT_DMT计算机等级考试
使用DLL文件中封装的窗口计算机等级考试
读一读Scktsrvr.exe的源程序计算机等级考试
怎样知道我的程序是否运行在DELPHI?计算机等级考试
再谈多态:多态的应用举例计算机等级考试
在Delphi中编写控件的基本方法计算机等级考试
短消息开发接口计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛