本人想把一个文本文件分字节发送给对方,怎么来?

解决方案 »

  1.   

    see this,can help you:
    http://www.vckbase.com/document/viewdoc.asp?id=321
      

  2.   


    void CCNetProgDlg::OnSendfile() 
    {
    // TODO: Add your control notification handler code here
    long len;
    CSocket sk;
    CFile f;
    f.Open ("c:\\recv.bmp",CFile::modeRead,0);
    len=f.GetLength ();
    char *readbuf=new char[len];
    // f.Open (m_strFileName,CFile::modeRead,0);
    long a=f.ReadHuge (readbuf,len);
    sk.Create ();
    if(!sk.Connect ("172.16.8.221",9000))
    {
    MessageBox("不能发送文件","连接失败",MB_OK);
    sk.Close ();
    return;
    }
    long res=sk.Send (readbuf,a,0);
    /* int times=len/5000;
    int sended =0;
    while(sended<=len)
    {
    int r=sk.Send (&(readbuf[sended]),5000);
    sended+=r;
    //break;

    }*/
    f.Close ();
    sk.Close ();
    delete readbuf;
    UpdateData(FALSE);
    }
    UINT ListenThread(LPVOID lparam)
    {
    CSocket sk,skrecv;
    sk.Create(9000);
    sk.Listen ();
    char strRec[20001];
    char read[4000];
    static long al=0;
    while(sk.Accept (skrecv))
    {
    char *pBuf=strRec;
    while(1)
    {
    memset(read,0,sizeof(read));
    int num=skrecv.Receive(read,4000,0);
    if(num==SOCKET_ERROR)
    {
    //出错了,加入你的处理 
    MessageBox(NULL,"接收出错啦","错误",MB_OK);
    break;
    }
    else
    {
    if(num>0)
    {
    //这段代码的计算也许有错,如果错了,就把指针再加1来试试吧
    //memcpy(pBuf,read,num);
    // pBuf+=num;
    if(a==1)
    {
    DeleteFile("E:\\recv.bmp");
    a++;
    }
    CFile f;
    f.Open("E:\\recv.bmp",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::typeBinary);//
    f.SeekToEnd ();
    f.Write(read,num);
    //f.Write ("\r\n",2);
    f.Close ();
    }
    else if(num==0)
    { //接收完毕,加入你的处理
    break;
    }
    else
    {
    //出错了,加入你的处理
    MessageBox(NULL,"接收出错啦2","错误",MB_OK);
    break;
    }
    }
    }//while(1)

    skrecv.Close ();

    } return 0;
    }