windows完成端口 等待客户端发送一次消息才能完成AcceptEx操作的解决方法

程序捕捉不到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);


这样就搞定了。

你可能感兴趣的:(网络编程)