关于完成端口不解的问题!!!!(100分)

  • 主题发起人 主题发起人 hubo927
  • 开始时间 开始时间
H

hubo927

Unregistered / Unconfirmed
GUEST, unregistred user!
最近看完成端口,有以下问题不解,请高手解答!!!<br>完成端口一般都会定义几种状态,如ssRecv,ssSend<br>AcceptThread线程在有客户端连接时,在绑定完端口后,会进行一个Recv操作,此时状态为ssRecv<br>WorkThread在GetQueuedCompletionStatus成功后,一般会根据状态来判断做什么操作,<br>即:ssRecv时,接收数据。ssSend时发送数据。<br>我想知道的是,操作状态在什么时候由ssRecv变为ssSend,或在什么时候由ssSend变为ssRecv,(因为accept线程发出的都是ssRecv状态啊)<br>并且这个装的改变应该放在什么地方,即如何判断接收完了客户端信息或如何判断信息已经完全发送给客户端?
 
是这样的<br>当你将一个套接字和一个完成端口绑定在一起以后。你调用WSSend函数发送数据,一般来说都是返回错误(这并不是说名你的数据发送失败)。<br>在你的工作者线程中,函数GetQueuedCompletionStatus返回以后,这是它会接收到所有的数据(包括你刚才调用WSSend函数发送的数据)。所以有两种情况。<br>1:对于你接收到你自己调用WSSEND的函数来说,那就证明你已经将数据发送了出去,这时你可以删除你申请的空间。<br>2:对于你实际接收到客户端发送过来的数据来说,你可以进行处理,处理完了以后你再此调用WSRECV函数来继续接收数据。
 
http://www.delphibbs.com/keylife/iblog.asp?author=jfyes
 
后退
顶部