是不是一定得用多线程?有没有什么简单的方法?

解决方案 »

  1.   

    为什么费要用非阻塞呢?设置socket为非阻塞://设置非阻塞方式连接  
    unsigned  long  ul  =  1;  
    ret  =  ioctlsocket(cClient,  FIONBIO,  (unsigned  long*)&ul);  
    if(ret==SOCKET_ERROR)return  0;
      

  2.   

    好多函数都可以实现:
    WSAIOCTL, setsockopt,ioctlsock,,当调用 WSAEventSlect,WSAasyncSelct()都会将
    socket 设置为非阻塞的模式;
    其实楼主的思路是对的,当有事件触发的时候在调用:看一点伪代码
    BEGIN
    char buf[BLOCKSIZE] = {0};
     file.Seek(0, CFile::begin);
     for(;;){
    nLen = file.Read(buf, BLOCKSIZE); 
    if(nLen == 0) break; 
    nSize = senSo.Send(buf, nLen);
    memset(buf,0,sizeof(buf));
    dwCount += nSize;
     } 
    file.Close();
    senSo.Close();
    if(m_dwFileSize == dwCount)
    END