3636|5

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TCP/IP 发送bmp图片问题(出在读取bmp文件那) [复制链接]

昨天调出了发送文件的程序 发送内容只有几个字符的文件没问题 今天想往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        ” 大家帮忙看看啊

最新回复

  才看见你这样做的。。你难道不知道字符串是以什么结尾的?你把一个字符数组赋值为一个字符串,就算本身有100个字节,只要中间某处有个'\0'字符,那个字符串也只能取到那为止,你看看bmp文件的格式,就能明白为什么你发出那么几个字节了。  详情 回复 发表于 2009-11-26 20:22
点赞 关注

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
psendbuff = (char)m_SendEdit.GetAt(i); /* 转换为单字节字符 */
你难道是把bmp的内容放在编辑框里的么?这样肯定不行的啦
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间   2440的内存是有限的,这个要注意
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 cfanlwn 的回复:
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间? 2440的内存是有限的,这个要注意
图片是640x480的 大概600K read bmp文件后 szBuf里存放的是什么呢 二进制数?
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 l840828 的回复:
图片是640x480的 大概600K read bmp文件后 szBuf里存放的是什么呢 二进制数?
存放的是字节数据啊
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

6
 
  才看见你这样做的。。你难道不知道字符串是以什么结尾的?你把一个字符数组赋值为一个字符串,就算本身有100个字节,只要中间某处有个'\0'字符,那个字符串也只能取到那为止,你看看bmp文件的格式,就能明白为什么你发出那么几个字节了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表