想法是先测试可以发数据否?可以就发代码如下,其中m_Socket.m_RemoteSocket是全局SOCKET,并已建立连接,接收端没问题:
void Send()
{
         char buff[]="test";
int nResult=0,Event=0,Index=0;
extern WSSocket m_Socket;
WSAEVENT wsaEvent[2],NewEvent;
SOCKET Socket[2];
WSANETWORKEVENTS NetworkEvents;
if(m_Socket.m_RemoteSocket==INVALID_SOCKET){
AfxMessageBox("客户端未建立连接");
return;
}
send(m_Socket.m_RemoteSocket,buff,sizeof(buff),0);
NewEvent=WSACreateEvent();
if(NewEvent==WSA_INVALID_EVENT){
AfxMessageBox("事件创建失败");
return;
}
if(WSAEventSelect(m_Socket.m_RemoteSocket,NewEvent,FD_WRITE)==SOCKET_ERROR){
AfxMessageBox(m_Socket.ProcessError(GetLastError()));
return;
}
    Socket[Event]=m_Socket.m_RemoteSocket;
wsaEvent[Event]=NewEvent;
for(int i=0;i<3;i++){
//first wait for event for infinite
  Index=WSAWaitForMultipleEvents(1,wsaEvent,FALSE,500,FALSE);
  if(Index==WSA_WAIT_TIMEOUT)
  continue;
  WSAEnumNetworkEvents(Socket[Index-WSA_WAIT_EVENT_0],wsaEvent[Index-WSA_WAIT_EVENT_0],&NetworkEvents);
  //at server only want to process accept read event
  TRACE0("write data\n");
    if(NetworkEvents.lNetworkEvents & FD_WRITE){
   if(NetworkEvents.iErrorCode[FD_WRITE_BIT]!=0){
  AfxMessageBox("FD_WRITE出错,"+m_Socket.ProcessError(NetworkEvents.iErrorCode[FD_ACCEPT_BIT]));
  break;
   }
    TRACE0("data is writing\n");
    nResult=send(Socket[Index-WSA_WAIT_EVENT_0],buff,sizeof(buff),0);
       if(nResult==SOCKET_ERROR){
         AfxMessageBox(ProcessError(WSAGetLastError()));
   }
   else{
   break;
   }
}//end fd_write
}//end for
    if(Index==WSA_WAIT_TIMEOUT&&i==3){
  AfxMessageBox("网络超时,发送不成功");
}
WSACloseEvent(wsaEvent[Event]);
WSACloseEvent(NewEvent);
}