程序捕捉不到accept这个事件,但是可以接受连接;
连接接受以后,可以捕捉到接收数据事件,也可以捕捉到连接关闭事件。
但为什么最初的接受客户端连接的事件就不能捕捉呢?
问题的根源在于服务端必须等到客户端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);
这样就搞定了。
转载请注明原文地址: https://ju.6miu.com/read-668432.html