谁能给我点提示?若要看代码请告之

解决方案 »

  1.   

    UINT _SendDataFile(LPVOID lparam) //线程函数
    {

    CFileTransfersDlg* pDlg = (CFileTransfersDlg*) lparam;        pDlg->BrowseDir() 

    return 0;
    }BOOL CFileTransfersDlg::BrowseDir( )//发送文件的函数
    {         
    CSocket sockdata;
    if(!sockdata.Create())
    {
    sockdata.Close();
    return FALSE;
    }

    CString strIPAddress;
                            int  Port  
    if(!sockdata.Connect(strIPAddress, Port ))
    {
    sockdata.Close();
    return FALSE;
    }

    SendDataFile(sockdata, "d:\\test_From.txt", "d:\\test_To.txt");

    sockdata.Close();
            return TRUE;
    }
    //使用senSo发送路径为m_strPathDataF的文件,并告诉接收程序将文件保存在路径m_strPathDataT。
    void CFileTransfersDlg::SendDataFile(CSocket &senSo,  CString m_strPathDataF, CString m_strPathDataT)
    { //打开要发送的文件
    CFile file;
    if(!file.Open(m_strPathDataF, CFile::modeRead | CFile::typeBinary|CFile::shareDenyNone))
    {
    AfxMessageBox(_T("文件打开失败"));

    senSo.Close();

    return ;
    } int nSize = 0, nLen = 0;
    char buf[BLOCKSIZE];
    file.Seek(0, CFile::begin); fd_set fdwrite;
    int ret;
    TIMEVAL timeout;
    timeout.tv_sec = 2;
    timeout.tv_usec = 0;
    BOOL bFirstPackage = TRUE;

    int iErrCode;
    CString strErr; //开始传送文件
    for(;;)
    { memset(buf, 0, BLOCKSIZE);
    if( bFirstPackage )
    {
    strcpy(buf, m_strPathDataT.GetBuffer(0));
    nLen = file.Read(buf+FILEINFO, BLOCKSIZE-FILEINFO);
    }
    else
    nLen = file.Read(buf, BLOCKSIZE);
    //一次读取BLOCKSIZE大小的文件内容 if(nLen == 0)
    break;
    //发送文件内容
    while(TRUE)
    {
    FD_ZERO(&fdwrite);
    FD_SET( senSo, &fdwrite);
    if( (ret=select(0, NULL, &fdwrite,NULL, &timeout)) == SOCKET_ERROR )
    {
    iErrCode = WSAGetLastError();
    switch(iErrCode)
    {
    case WSANOTINITIALISED:
    strErr = "WSANOTINITIALISED";
    break;
    case WSAEFAULT:
    strErr = "WSAEFAULT";
    break;
    case WSAENETDOWN:
    strErr = "WSAENETDOWN";
    break;
    case WSAEINVAL:
    strErr = "WSAEINVAL";
    break;
    case WSAEINTR:
    strErr = "WSAEINTR";
    break;
    case WSAEINPROGRESS:
    strErr = "WSAEINPROGRESS";
    break;
    case WSAENOTSOCK:
    strErr = "WSAENOTSOCK";
    break;
    default :
    strErr = "UNKNOWERROR";
    break;
    }
    //::MessageBox(NULL, strErr.GetBuffer(0), "SendDataFile错误", MB_OK); //关闭文件
    file.Close();
    //关闭套接字
    senSo.Close();

    GetDlgItem(IDC_DISCONNECT)->EnableWindow(TRUE);
    m_bIsTransmitting = FALSE;
    return ;
    }

    if( ret == 0 )
    { //关闭文件
    file.Close();
    //关闭套接字
    senSo.Close();

    GetDlgItem(IDC_DISCONNECT)->EnableWindow(TRUE);
    m_bIsTransmitting = FALSE;
    return ;
    }

    if( ret > 0 )
    {
    if( FD_ISSET( senSo, &fdwrite ))
    {
    if( bFirstPackage )
    {
    nSize = senSo.Send(buf, nLen+FILEINFO);
    bFirstPackage = FALSE;
    }
    else
    nSize = senSo.Send(buf, nLen); if(nSize != SOCKET_ERROR)
    break;
    else
    {
    iErrCode = WSAGetLastError();
    switch(iErrCode)
    {
    case WSANOTINITIALISED:
    strErr = "WSANOTINITIALISED";
    break;
    case WSAENETDOWN:
    strErr = "WSAENETDOWN";
    break;
    case WSAEINVAL:
    strErr = "WSAEINVAL";
    break;
    case WSAEINPROGRESS:
    strErr = "WSAEINPROGRESS";
    break;
    case WSAENOTSOCK:
    strErr = "WSAENOTSOCK";
    break;
    case WSAENOTCONN:
    strErr = "WSAENOTCONN";
    break;
    case WSAEOPNOTSUPP:
    strErr = "WSAEOPNOTSUPP";
    break;
    case WSAESHUTDOWN:
    strErr = "WSAESHUTDOWN";
    break;
    case WSAEWOULDBLOCK:
    strErr = "WSAEWOULDBLOCK";
    break;
    case WSAEMSGSIZE:
    strErr = "WSAEMSGSIZE";
    break;
    case WSAECONNABORTED:
    strErr = "WSAECONNABORTED";
    break;
    case WSAECONNRESET:
    strErr = "WSAECONNRESET";
    break;
    case WSAEACCES:
    strErr = "WSAEACCES";
    break;
    case WSAEFAULT:
    strErr = "WSAEFAULT";
    break;
    case WSAENETRESET:
    strErr = "WSAENETRESET";
    break;
    case WSAENOBUFS:
    strErr = "WSAENOBUFS";
    break;
    default :
    strErr = "UNKNOWERROR";
    break;
    } //关闭文件
    file.Close(); //关闭套接字
    senSo.Close();


    GetDlgItem(IDC_DISCONNECT)->EnableWindow(TRUE);

    m_bIsTransmitting = FALSE;
    return ;
    }

    }
    }
    }
    }
    //关闭文件
    file.Close();
    //关闭套接字
    senSo.Close();


    }
    UINT _SendDataFile(LPVOID lparam) 线程每5秒启动一次