小弟写了一个UDP通讯程序,出现如下的问题:
当客户端第一次登陆后,发送信息,两边都成功,当而服务器端不退出客户端退出,然后客户端重新登陆后,客户端发送信息到服务器,服务器端接收正常,之后服务器端将其发送到客户端,显示是发送成功,但从客户端跟踪的结果来看,客户端竟然是不执行FD_READ,而是执行了FD_WRITE,(我是用WSAAsyncSelect())而在FD_WRITE里调用recv函数却又调用失败,因而接收不了服务器端发送过来的信息。这是怎么回事?FD_WRITE 和FD_READ有什么区别?那位兄弟有兴趣的,留下E-MAIL,我发代码过去帮我看看!

解决方案 »

  1.   

    FD_WRITE  就说有东西可写 就是 可以发送数据
    FD_READ   就是有数据接受 就调用 recv
      

  2.   

    FD_WRITE: 
    1.When WSAAsyncSelect called, if a send or sendto is possible. 
    2.After connect or accept called, when connection established. 
    3.After send or sendto fail with WSAEWOULDBLOCK, when send or sendto are likely to succeed. 
    4.After bind on a connectionless socket. FD_WRITE may or may not occur at this time (implementation-dependent). In any case, a connectionless socket is always writeable immediately after a bind operation. FD_WRITE会在上面五种情况发生,我想你在连上服务端后肯定会有一次这样的事件的,而随后就会有FD_READ的。
      

  3.   

    关键问题是,你sever端发送端口变化了,应该从recv的function中获得ip, port,
    然后用此来发送