又是位图问题,位图用TCP/IP实现传输。出现问题不小,小弟请教。
我想的是把位图看做一般的文件,用传输一般文件的办法传输位图。
从位图的存储格式来说,我想应该是可以的。(?)
但是,传输完后。大小比原图大了一点点。
可重要的是,位图显示不出来。用Windows图片传真和查看器看,没有预览。
现在,我就不知道是为什么了?
难道,我传输开始的时候位图就被做了相应的处理。晕。
哪位大哥大姐辛苦一下,告诉小弟我,怎么回事?怎么弄?
小弟感谢。
问题点数:20、回复次数:2Top
1 楼Mackz(在相互)回复于 2006-03-18 20:16:15 得分 0
你先说你怎么弄?Top
2 楼luocolor1()回复于 2006-03-19 00:27:55 得分 0
我也是到处看看,然后写的东西,^_^。
这个功能是我要做的一个东西的一个模块,所以我用的是从客户端点击发送按钮来触发传递数据事件的。
这是我第一次把自己的代码拿出来看,很乱。别笑。大哥们。^_^
int recvLen=0;
CFile myFile(_T("\\Storage Card\\firsttry.bmp"),CFile::modeCreate |CFile::modeWrite |CFile::typeBinary); //新建的file,用于接受数据。
//服务器端收到来自客户端的数据
void CALLBACK CTCPServerDlg::OnClientRead(CWnd* pWnd,CTCPCustom_CE* pTcpCustom,const char * buf,int len )
//这是我看的例子上的,我觉得在这里用char不行,不过用BYTE也不行。?不知道了
//下面的有些变量只是用来debug用的,看些信息。我要的是把图片传递到firsttry。bmp中
//还有就是因为位图比较大,所以在用socket传的时候,虽然点了发送按钮,但是是经过n次
//才把数据传完的。所以用strRecvLen来标记总的接受的长度。strLen是一次接受的长度。
//
{
CString strLen,strRecvLen;
strLen.Format(L"%d",len);
recvLen+=len;
strRecvLen.Format(L"%d",recvLen);
char *data;
data=(char*)malloc(len);
memcpy(data,buf,len);
myFile.Seek(recvLen,CFile::begin);
myFile.Write(data,len);
CTCPServerDlg * pDlg = (CTCPServerDlg*)pWnd;
CListBox * pLstRecv = (CListBox*)pDlg->GetDlgItem(IDC_LSTRECV);
ASSERT(pLstRecv != NULL);
pLstRecv->AddString(_T("************************************"));
pLstRecv->AddString(_T("来自: ") + pTcpCustom->m_RemoteHost );
pLstRecv->AddString(_T("数据长度:")+strLen);
pLstRecv->AddString(_T("数据长度:")+strRecvLen);
//pLstRecv->AddString(data);
if (!pTcpCustom->SendData("recv ok",strlen("recv ok")))
{
AfxMessageBox(_T("发送失败"));
}
}
//发送数据按钮单击事件代码
void CTCPClientDlg::OnBtnsenddata()
{
LPCTSTR lpszFileName=_T("\\Temp\\mapxiao.bmp");
CFile file(lpszFileName, CFile::modeRead|CFile::typeBinary);
int sendLen=0;
sendLen=file.GetLength();
char * sendBuf;
sendBuf=(char*)::LocalAlloc(LPTR,sendLen);
file.ReadHuge(sendBuf,sendLen);
if (!m_tcpClient.SendData(sendBuf,sendLen))
{
AfxMessageBox(_T("发送失败"));
}
delete[] sendBuf;
sendBuf = NULL;
}Top




