是不是异步选择,异步事件等模型只能用于服务端,客户端不能使用,该怎么处理

是不是异步选择,异步事件等模型只能用于服务端,客户端不能使用
当客户端主动发送数据给服务端的时候, 客户端采用winsock 提供的几个模型,反而不对, 

是否放弃模型, 而采用堵塞的套接字 去发送数据 较为合适呢

////////////////////////////////////////////////////////////////////////

异步事件,异步选择等模型, 无论是来自网络,还是书本提供的例子,没有一个例子是客户端采用模型的。 

原因或许:模型特点决定的。如:异步选择模型,当某个消息发生的时候,那么再进行相应的动作。常见的消息有:

FD_ACCEPT,  FD_READ ,前者是接受客户端的连接, 后者是接受与之通信的主机发送来的数据,这个消息就会产生。


而消息FD_WRITE 如何产生呢?  书本似乎都没有提到过,涉及过。


对于异步事件模型也是同一个道理,调用了WSAWaitForMutipleEvents,  WSAEnumNetWorkEvents 等函数后,才能够确定 具体的何种消息。 附一个片段:
 

while(TRUE)
{
// 在所有事件对象上等待
int nIndex = ::WSAWaitForMultipleEvents(nEventTotal, eventArray, FALSE, WSA_INFINITE, FALSE);
// 对每个事件调用WSAWaitForMultipleEvents函数,以便确定它的状态
nIndex = nIndex - WSA_WAIT_EVENT_0;
for(int i=nIndex; i<nEventTotal; i++)
{
nIndex = ::WSAWaitForMultipleEvents(1, &eventArray[i], TRUE, 1000, FALSE);
if(nIndex == WSA_WAIT_FAILED || nIndex == WSA_WAIT_TIMEOUT)
{
continue;
}
else
{
// 获取到来的通知消息,WSAEnumNetworkEvents函数会自动重置受信事件
WSANETWORKEVENTS event;
::WSAEnumNetworkEvents(sockArray[i], eventArray[i], &event);
if(event.lNetworkEvents & FD_ACCEPT) // 处理FD_ACCEPT通知消息
{
if(event.iErrorCode[FD_ACCEPT_BIT] == 0)



这个代码片段说明了FD_ACCEPT ,FD_READ 产生的原因,是有连接,或者有数据发送给我,所以才有相应的事件产生了。

但是  FD_WRITE 到底是如何产生的呢?        该在什么地方调用send函数发送数据让其产生 FD_WRITE 事件呢?

似乎,没有地方可以调用。


是否可以得出一个结论:网络编程中, 异步选择,异步事件等各种模型只能用于服务端,客户端不能使用


------解决方案--------------------
这几天太慢了,今天给发了 你接收下吧

关于文件那里的问题

在IM中,文件是有单独的套记住和协议进行处理的
如果你想在一个套接字中 完成所有的功能 ,你需要把协议写的非常的强大 
------解决方案--------------------
补充个,我不是什么高手,一起研究就是了