一个关于TSocketConnection的问题! ( 积分: 100 )

  • 主题发起人 主题发起人 zzpphhdd
  • 开始时间 开始时间
Z

zzpphhdd

Unregistered / Unconfirmed
GUEST, unregistred user!
本人最近正在从事Midas的通信效率的研究,scktsrvr及其相关的源码几乎读完,可是在调客户端的TsocketConnection源码时发现,当我想用单步调试的方法调试SocketConnection.connected:=true或者Socketconnection.open的执行情况时,发现它并不进入SConnect单元的源码中,这就使我无法了解TSocketConnection的客户端Socket API的使用情况(即不知道客户端在何时调用Socket API来连接Scktsrvr),请问这是怎么回事呢,我怎么才能看见TSocketConnection的连接代码?请大富翁们不吝赐教!另外,TSocketConnection用改进吗?100分求教!
 
本人最近正在从事Midas的通信效率的研究,scktsrvr及其相关的源码几乎读完,可是在调客户端的TsocketConnection源码时发现,当我想用单步调试的方法调试SocketConnection.connected:=true或者Socketconnection.open的执行情况时,发现它并不进入SConnect单元的源码中,这就使我无法了解TSocketConnection的客户端Socket API的使用情况(即不知道客户端在何时调用Socket API来连接Scktsrvr),请问这是怎么回事呢,我怎么才能看见TSocketConnection的连接代码?请大富翁们不吝赐教!另外,TSocketConnection用改进吗?100分求教!
 
当然不进入,需要把SConnect.pas单元加入到工程里来,才能够调试进入这个单元的代码
 
哦,对这个问题忽视了!谢谢Z_cd的指教,帖子完了给分!另外,我想问一下,如果我要改进scktsrvr的Socket I/O模型,我看了些资料,说scktsrvr是异步Select模型,但据我分析好像不是,它把WSAAsyncSelect函数屏蔽了而是用Ioctlsock设为阻塞式!是不是这样呢?请高手继续告知!
另外,在改了Scktsrvr的I/O模型后,这个TSocketConnection用改进吗?因为我好像找不到他所使用的Socket API,不知道他到底是阻塞还是非阻塞!谢谢!
 
Scktsrvr是用阻塞方式的,看看这里就知道了
constructor TSocketDispatcher.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ServerType := stThreadBlocking;
OnGetThread := GetThread;
end;
 
迷糊兄,你上面列出的代码我岂能没看到,这段表示的是这个继承自TServerSocket的服务模型是线程阻塞模型,而我说的是它的Socket模型(或模式),这两个东西好像不能划等号吧?今天又看到说是用异步Event模型,我快疯掉了,怎么没人谈谈这个问题呢?
我已经看明白了TSocketConnection的源码,它是在一个线程里创建TClientSocket,然后把它设为ctBlocking,问题是如果我用完成端口改Socketsrvr的Socket I/O模型,那这个客户端的连接方式要不要改呢?
 
看看这两个过程就知道这是一个异步事件模型
procedure TSocketDispatcherThread.ClientExecute;
begin
。。。
Event := FTransport.GetWaitEvent;
。。。
case MsgWaitForMultipleObjects(1, Event, False, WaitTime, QS_ALLEVENTS) of
end;
function TSocketTransport.GetWaitEvent: THandle;
begin
FEvent := WSACreateEvent;
WSAEventSelect(FSocket.SocketHandle, FEvent, FD_READ or FD_CLOSE);
Result := FEvent;
end;

另外服务器端用什么模型对客户端没什么影响
 
非常感谢迷糊兄的关注,我觉得你说得很有道理!那请问你如果要用完成端口模型对Scktsrvr进行改进,你认为应该从哪里改进呢?我觉得是从TSocketDispatcher改进,因为他继承自TServerSocket,所以他就有TServerSocket不可避免的缺点,除非改Borland的ScktComp源码。上面的异步事件模型也应该要改,就是说,还要对该线程的ClientExecute方法进行改进吧?
 
多人接受答案了。
 
后退
顶部