连接接受以后,可以捕捉到接收数据事件,也可以捕捉到连接关闭事件。
但为什么最初的接受客户端连接的事件就不能捕捉呢?
问题的根源在于服务端必须等到客户端send一次数据,AcceptEx的操作才能完成。那怎么办有处理方法吗,当然有。
(PASCAL FAR * LPFN_ACCEPTEX)(
__in SOCKET sListenSocket,
__in SOCKET sAcceptSocket,
__in PVOID lpOutputBuffer,
__in DWORD dwReceiveDataLength,//--------------------------修改这个参数的值=0,把接收长度设置成0就可以直接捕捉到到连接消息了
__in DWORD dwLocalAddressLength,
__in DWORD dwRemoteAddressLength,
__out LPDWORD lpdwBytesReceived,
__inout LPOVERLAPPED lpOverlapped
);
或者
AcceptEx(
__in SOCKET sListenSocket,
__in SOCKET sAcceptSocket,
__in PVOID lpOutputBuffer,
__in DWORD dwReceiveDataLength,//--------------------------修改这个参数的值=0,把接收长度设置成0就可以直接捕捉到到连接消息了
__in DWORD dwLocalAddressLength,
__in DWORD dwRemoteAddressLength,
__out LPDWORD lpdwBytesReceived,
__inout LPOVERLAPPED lpOverlapped);
这样就搞定了。