首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

自己搞个传文件,最后总产生一个 CFileException:genericException解决思路

2012-04-27 
自己搞个传文件,最后总产生一个 CFileException::genericException客户端读取C盘根目录下的一个MP3,然后发

自己搞个传文件,最后总产生一个 CFileException::genericException
客户端读取C盘根目录下的一个MP3,然后发送给服务器端。服务器端接收完全部文件后保持到D盘根目录下。
下面接收完以后,D盘下的MP3是可以播放的,所以估计字节都正确接收了。但不知道为什么总产生一个异常,由于实在没能解决,最后就不得不装傻来解决了

C/C++ code
#include <iostream>using namespace std;#include <afxtempl.h>#include <afxwin.h>void main(){    cout<<" 服务器 "<<endl;    WSADATA wd;    WSAStartup(MAKEWORD(2,2), &wd);    SOCKET s1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    SOCKADDR_IN tcpaddr;    tcpaddr.sin_family = AF_INET;    tcpaddr.sin_port = htons(5150);    tcpaddr.sin_addr.S_un.S_addr = htonl( INADDR_ANY );    bind(s1, (SOCKADDR*)&tcpaddr, sizeof(tcpaddr)) ;    listen(s1, 5);        SOCKADDR_IN ClientAddr;    int len= sizeof(SOCKADDR_IN);;    SOCKET s2;    s2 = accept(s1, (SOCKADDR*)&ClientAddr, &len);    if( s2 != SOCKET_ERROR )        cout<<"有客户机连入"<<endl;    char size[100];    recv(s2, size, 100,0);    cout<<"服务器端收到的文件大小为\t"<<size<<endl;    ULONGLONG nSize = _atoi64(size);    //char * buf = new char[ _atoi64(size) ];    //::ZeroMemory(buf,_atoi64(size));        //_atoi64(buf);    CFile file(L"d:\\b.mp3", CFile::modeCreate /*| CFile::typeBinary */| CFile::modeReadWrite);    while(1)    {        char * buf;        if( nSize  )        {            buf = new char[1000];            int r = recv(s2, buf, 1000, 0);            try            {                file.Write(buf, r);            }            catch(CFileException*e)            {                e->Delete();                break;            }            nSize -= r;            delete [] buf;        }        else            break;    }        //file.Close();    //delete [] buf;    WSACleanup();}




C/C++ code
#include <iostream>using namespace std;#include <afxwin.h>void main(){    cout<<" 客户端 "<<endl;    WSADATA wd;    WSAStartup(MAKEWORD(2,2), &wd);    SOCKET s1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    SOCKADDR_IN add;    add.sin_family = AF_INET;    add.sin_port = htons(5150);    add.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    int a=connect(s1, (SOCKADDR*)&add, sizeof(add));    if(a==WSAECONNREFUSED || a==WSAETIMEDOUT)    {        cout<<"没连上"<<endl;        return;    }    CFile file(L"C:\\和兰花在一起.mp3", CFile::typeBinary);    ULONGLONG FileLength = file.GetLength();    char * size = new char[100];    ::ZeroMemory(size,100);    sprintf(size, "%i64", FileLength);    cout<<" size: "<<size<<endl;    send(s1, size, 10, 0);    LONGLONG filePointer=file.GetPosition();    while(1)    {        char *buf;        if( FileLength  )        {            buf = new char[1000];            UINT r = file.Read(buf, 1000);            int s = send(s1, buf, r, 0);            filePointer += s;            file.Seek(filePointer, CFile::begin);            FileLength -= s;        }        else            break;    }    }





[解决办法]
点重试看调用堆栈
看看是哪里出的问题
我看你上一个帖子就说这个问题了
感觉应该是写文件附近的错误吧

热点排行