TCP/IP 发送bmp图片问题(出在读取bmp文件那)

liao_0222   2009-11-26 09:58 楼主
昨天调出了发送文件的程序 发送内容只有几个字符的文件没问题 今天想往PC上发送bmp图片(是OV9650采集的一帧图片保存在开发板上的),读出的数据就不对了 只读出三个字符
我是想着open文件 read文件 一个字符一个字符的发送 在PC上再把数据导成图片 现在就是读取文件内容不对
void CTCPClientExDlg::OnOpenfile()
{
  CFile MyFile;
  CString m_FileName;
  CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("All Files(*.*)|*.*||"));
  if(FileDlg.DoModal()==IDOK)
{

    m_FileName=FileDlg.GetPathName();
    MyFile.Open (m_FileName,CFile::modeRead);  //打开文件
    DWORD sendlen =MyFile.GetLength() ; //得到文件长度
    CHAR *szBuf=new CHAR [sendlen];//开辟存储空间
    MyFile.Read ( szBuf,  sendlen); //读文件
    m_SendEdit.Format(_T("%s"),szBuf);                       
    MyFile.Close (); //关闭文件
    UpdateData(false); //更新编辑框显示
    AfxMessageBox(_T("Read OK")); //输出读成功消息
    delete []szBuf;//清除存储空间
}             
}



void CTCPClientExDlg::OnSend()
{
        int nErrorCode;
        int cnt = 0, actlen = 0;

        if (m_Socket == NULL)
                return;

//        UpdateData(TRUE);
        int sendlen = m_SendEdit.GetLength();                                 /* 取得输入字符串长度 */
        char *psendbuff = new char[sendlen];

        for(int i = 0; i < sendlen;i++)
                psendbuff = (char)m_SendEdit.GetAt(i);                 /* 转换为单字节字符 */
       
        while(cnt < sendlen)
        {        // 发送数据
                actlen = send(m_Socket, psendbuff + cnt, sendlen - cnt, 0);
                if (actlen == SOCKET_ERROR )
                {
                        MessageBox(_T("TCP 数据发送失败!"));
                        nErrorCode = WSAGetLastError();
                        delete[] psendbuff;
                        return;
                }

                cnt = cnt + actlen;
                if (cnt < sendlen)
                        Sleep(1000);
        }
       
        delete[] psendbuff;       

}
打开bmp文件 读出来的是2个乱码和一个空格 发送到PC上是“B6        ” 大家帮忙看看啊

回复评论 (5)

psendbuff = (char)m_SendEdit.GetAt(i); /* 转换为单字节字符 */
你难道是把bmp的内容放在编辑框里的么?这样肯定不行的啦
点赞  2009-11-26 10:22
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间   2440的内存是有限的,这个要注意
点赞  2009-11-26 11:33
引用: 引用 2 楼 cfanlwn 的回复:
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间? 2440的内存是有限的,这个要注意
图片是640x480的 大概600K read bmp文件后 szBuf里存放的是什么呢 二进制数?
点赞  2009-11-26 15:07
引用: 引用 3 楼 l840828 的回复:
图片是640x480的 大概600K read bmp文件后 szBuf里存放的是什么呢 二进制数?
存放的是字节数据啊
点赞  2009-11-26 16:39
  才看见你这样做的。。你难道不知道字符串是以什么结尾的?你把一个字符数组赋值为一个字符串,就算本身有100个字节,只要中间某处有个'\0'字符,那个字符串也只能取到那为止,你看看bmp文件的格式,就能明白为什么你发出那么几个字节了。
点赞  2009-11-26 20:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复