我想把文件一下传过去,可是只接受到一点数据,请高手指点~~~
我的代码是:
发送端
void CTcpClientDlg::OnSend()
{
int nErrorCode;
if (m_Socket == NULL)
return; CFile sendFile(_T("ReadMe.txt"),CFile::modeRead); //打开要发送的文件
LONG lenth = sendFile.GetLength(); //得到文件长度
char *pFileData = new char[lenth];
// CString fileName = _T("ReadMe.txt");
// int len = fileName.GetLength();
// char *name = new char[len];
//
// for (int i=0; i<len; ++i)
// {
// *(name+i) = fileName.GetAt(i);
// }
//
// CFile ToBeSendFile(fileName,CFile::modeRead);
// int fileLenth = sendFile.GetLength();
char pFileLenth[50]; //得到文件信息
_itoa(lenth,pFileLenth,10);
send(m_Socket,pFileLenth,sizeof(pFileLenth),0);//发文件长度
// send(m_Socket,name,len,0);
sendFile.Read(pFileData,lenth);
send(m_Socket,pFileData,lenth,0);//发送文件数据 sendFile.Close();}
接收端
void CReqSocket::OnReceive(int nErrorCode)
{
char pBuffer[20];
memset(pBuffer,0,20);
int iLen; if (READFILELENTH == index) //读文件长度
{
if ( (iLen=Receive(pBuffer, sizeof(pBuffer))) == SOCKET_ERROR )
{
iLen = GetLastError();
wsprintf(pBuffer, "Recv Data Error:%d", iLen);
AfxGetMainWnd()->MessageBox(pBuffer, "接收错误", MB_OK|MB_ICONERROR);
} index++;
BufferSize = atoi(pBuffer);
}
else if (READFILENAME == index) //读文件名字
{
iLen = Receive(pBuffer, sizeof(pBuffer));
FileName = pBuffer; index++;
}
else if (READFILEDATA == index) //读文件数据
{
char *pFileData = new char[BufferSize];
CFile destFile("C:\\Test.txt",CFile::modeCreate | CFile::modeWrite);
destFile.Seek(0,CFile::begin);
iLen = Receive(pFileData, sizeof(pFileData));//为什么不正确!!!!!!!! destFile.Write(pFileData,BufferSize);
destFile.Close(); index++;
}
else
{
return;
} CAsyncSocket::OnReceive(nErrorCode);}
我的代码是:
发送端
void CTcpClientDlg::OnSend()
{
int nErrorCode;
if (m_Socket == NULL)
return; CFile sendFile(_T("ReadMe.txt"),CFile::modeRead); //打开要发送的文件
LONG lenth = sendFile.GetLength(); //得到文件长度
char *pFileData = new char[lenth];
// CString fileName = _T("ReadMe.txt");
// int len = fileName.GetLength();
// char *name = new char[len];
//
// for (int i=0; i<len; ++i)
// {
// *(name+i) = fileName.GetAt(i);
// }
//
// CFile ToBeSendFile(fileName,CFile::modeRead);
// int fileLenth = sendFile.GetLength();
char pFileLenth[50]; //得到文件信息
_itoa(lenth,pFileLenth,10);
send(m_Socket,pFileLenth,sizeof(pFileLenth),0);//发文件长度
// send(m_Socket,name,len,0);
sendFile.Read(pFileData,lenth);
send(m_Socket,pFileData,lenth,0);//发送文件数据 sendFile.Close();}
接收端
void CReqSocket::OnReceive(int nErrorCode)
{
char pBuffer[20];
memset(pBuffer,0,20);
int iLen; if (READFILELENTH == index) //读文件长度
{
if ( (iLen=Receive(pBuffer, sizeof(pBuffer))) == SOCKET_ERROR )
{
iLen = GetLastError();
wsprintf(pBuffer, "Recv Data Error:%d", iLen);
AfxGetMainWnd()->MessageBox(pBuffer, "接收错误", MB_OK|MB_ICONERROR);
} index++;
BufferSize = atoi(pBuffer);
}
else if (READFILENAME == index) //读文件名字
{
iLen = Receive(pBuffer, sizeof(pBuffer));
FileName = pBuffer; index++;
}
else if (READFILEDATA == index) //读文件数据
{
char *pFileData = new char[BufferSize];
CFile destFile("C:\\Test.txt",CFile::modeCreate | CFile::modeWrite);
destFile.Seek(0,CFile::begin);
iLen = Receive(pFileData, sizeof(pFileData));//为什么不正确!!!!!!!! destFile.Write(pFileData,BufferSize);
destFile.Close(); index++;
}
else
{
return;
} CAsyncSocket::OnReceive(nErrorCode);}
解决方案 »
- 谁能给个windows下多线程+互斥锁的简单例子?
- combo box控件静态设置了内容,对话框运行起来combo box里面内容却为空
- 很急啊,问下VC++6.0的Picture控件怎样才能放上一个图片...?
- List控件??
- 一个关于gina的问题,散分...
- bcg使用的一个问题,请高手指教,在线等待。解决后散尽300分。(急!!!)
- ASSERT(m_hFile != (UINT)hFileNull);我的程序运行错误说这是病因,这句什么意思!
- vc如何实现小票打印(超市的那种)
- 如何编写带参数访问数据库的代码
- 如何通过WIN API函数获得本机IP地址?
- 限制鼠标范围
- 请教两个简单问题,一个C++实现的数学问题,一个语言本身的问题
发给我下好吗?
谢谢了~~
邮箱:[email protected]