一直搞不懂 WSAEventSelect 的 FD_WRITE ,不知道怎么利用他在自己想发数据的时候发数据,后来知道了想发随时发消息 要自己另外去写send方法,FD_WRITE 是用于一开始连接成功侯就开始发送大批量数据的,比如发一个视频连接给别人 ,别人接了 那么这个时候就触发了FD_WRITE ,视频的数据会不停的充满缓存,所以FD_WRITE会不停的触发因为没人教我 只能靠自己苦苦参悟了 希望别的朋友也能看到我的文字,不要 去被 FD_WRITE 烦恼了 想自己随时发数据的时候 ,自己另外去写send方法 如果你不是一次性发送大批量数据的话,就别想着使用FD_WRITE事件了,因为如果既希望于在收到FD_WRITE的时候发送数据,但是又不能发送足够多的数据填满socket缓冲区的话,就只能收到刚刚建连接的时候的第一次事件,之后及不会再收到了,所以当只是发送尽可能少的数据的时候,忘掉FD_WRITE机制,在任何想发送数据的时候直接调用send发送吧。
case FD_WRITE: // 可以发送数据了
{
// 进入无限循环
while(TRUE)
{
// 从文件中读取数据, 保存到 packet.data 里面.
in.read((char*)&packet.data, MAX_PACKET_SIZE);
// 发送数据
if (send(wparam, (char*)(&packet), sizeof(PACKET), 0) == SOCKET_ERROR)
{
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
// 发送缓冲区已经满了, 退出循环.
break;
}
else // 其他错误
{
// 显示出错信息然后退出.
CleanUp();
return(0);
}
}
}
} break;