为什么我以下程序只能写.txt文件???急求答案,先谢谢了???只有这些分了555

xyz666 2006-09-04 12:43:09
DWORD WINAPI CTransferDlg::SendFileProc(LPVOID lpParameter)//发送文件进程
{
DWORD dwIP = ((SENDPARAM*)lpParameter)->m_dwIP;
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(7000);
addrSrv.sin_addr.S_un.S_addr = dwIP;

SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
if(SOCKET_ERROR == connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)))
{
AfxMessageBox("Connect fail!");
return 0;
}
// connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

CString fileName;
fileName = myFile.GetFileName();
send(sockClient, fileName, fileName.GetLength()+1, 0);

char Recvstr[2];
memset(Recvstr, 0, 2);
recv(sockClient,Recvstr,2,0);
if(CString(Recvstr) == "N")
return 0;

CString strLength;
UINT fileLength;
fileLength = myFile.GetLength();
strLength.Format("%d", fileLength);
send(sockClient, strLength, fileLength, 0);
// Sleep(1000);
Sleep(10);
// now send the file's data
char sendData[SEND_BUFFER_SIZE];
memset(sendData, 0, SEND_BUFFER_SIZE);
UINT LeftToSend = myFile.GetLength();
do
{
memset(sendData, 0, SEND_BUFFER_SIZE);
int sendThisTime, doneSoFar, buffOffset;
sendThisTime = myFile.Read(sendData, SEND_BUFFER_SIZE);
buffOffset = 0;
do
{
doneSoFar = send(sockClient, sendData + buffOffset, sendThisTime,0);
buffOffset += doneSoFar;
sendThisTime -= doneSoFar;
LeftToSend -= doneSoFar;
}
while ( sendThisTime > 0 );
}
while(LeftToSend >0 );

/* UINT length_counter=0;
int sendLen;
while(length_counter<fileLength)
{
memset(sendData,0,SEND_BUFFER_SIZE);
sendLen = myFile.Read(sendData,SEND_BUFFER_SIZE);
send(sockClient,sendData,sendLen,0);
length_counter += sendLen ;
}*/
AfxMessageBox("Send Success!");
myFile.Close();
closesocket(sockClient);
return 1;
}

DWORD WINAPI CTransferDlg::RecvConnProc(LPVOID lpParameter)
{
// if(bOpenFile == FALSE)
// return 0;
SOCKET sockSrv=((RECVPARAM *)lpParameter)->sock;
HWND hwnd=((RECVPARAM *)lpParameter)->hwnd;
SOCKADDR_IN addrClient;
SOCKET sockConn;
int len = sizeof(SOCKADDR);
// while(1)
// {
listen(sockSrv, 10);
sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
RECVPARAM *pRecvFileParam=new RECVPARAM;
pRecvFileParam ->sock = sockConn;
pRecvFileParam ->addr = addrClient;

HANDLE hReceFileThread = CreateThread(NULL, 0, RecvFileProc, (LPVOID)pRecvFileParam,
0, NULL);
CloseHandle(hReceFileThread);

// }
return 0;

}



DWORD WINAPI CTransferDlg:: RecvFileProc(LPVOID lpParameter)//接收文件进程
{
// if(bOpenFile == FALSE)
// return 0;
SOCKET sockConn = ((RECVPARAM *)lpParameter)->sock;
SOCKADDR_IN addrClient = ((RECVPARAM *)lpParameter)->addr;
char filename[100];
memset(filename,0 ,100);
//reveive file's name
recv(sockConn,filename,100,0);

CString RecvMsg;
RecvMsg.Format("%s send you -%s- Accept or Not?",inet_ntoa(addrClient.sin_addr),filename);
if(IDNO == ::AfxMessageBox(RecvMsg, MB_YESNO))
{
send(sockConn, "N", 2, 0);
return 0;
}
else
{
send(sockConn, "Y", 2, 0);
}

char strfileLen[32];
memset(strfileLen,0,32);
// Sleep(10);
recv(sockConn,strfileLen,32,0);
UINT filelen = atoi(strfileLen);

CFileDialog filedlg(false,NULL,filename);
if(IDCANCEL==filedlg.DoModal())
return 0;
CFile file;
file.Open(filedlg.GetFileName(),CFile::modeWrite|CFile::modeCreate|CFile::typeBinary);
// Sleep(5000);
char DataBuffer[SEND_BUFFER_SIZE];
memset(DataBuffer, 0, SEND_BUFFER_SIZE);
UINT length_counter = 0;
while(length_counter < filelen)
{
memset(DataBuffer, 0, SEND_BUFFER_SIZE);
int LengthReceived=0;
int totalReceived=0;
BOOL Continue = TRUE;
char* pDataBufferIndex = &DataBuffer[0];
while (Continue && (totalReceived < SEND_BUFFER_SIZE ))
{
LengthReceived =
recv(sockConn, pDataBufferIndex, (SEND_BUFFER_SIZE - totalReceived), 0);
switch(LengthReceived)
{
case 0:
Continue = FALSE;
break;
case SOCKET_ERROR:
Continue = FALSE;
break;
default:
pDataBufferIndex += LengthReceived;
totalReceived += LengthReceived;
length_counter+=LengthReceived;
break;
}
}
file.Write(DataBuffer,totalReceived);
}
closesocket(sockConn);
file.Close();
return 0;

}

还有为什么大文件就不能读写了???
请高人指点。下次在好好给分。
...全文
106 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyz666 2006-09-04
  • 打赏
  • 举报
回复
我是要实现两台电脑上传送文件,但为什么只能传.txt文件???其他的文件格式不行呢???
xyz666 2006-09-04
  • 打赏
  • 举报
回复
to:seu07201213

我的 myFile 是个全局变量,因为有两个函数要用到它,你能否发到我的邮箱里wutongyu518@163.com ,谢谢了
现在又出现新的问题,那就是在传的过程中有乱码加进去,就在文件前加了几行乱码,我好像都把内存清空了,也还是有这情况出现,而且传的文件有些打不开,像.wma不能播放,.doc,而.mp3可以播放,但是这些文件大小在传的过程中大小还是一致的,请问问题是不是出在加了乱码进去啊???
折腾_苏州 2006-09-04
  • 打赏
  • 举报
回复
粗略看下,你这个myFile 怎么声明的? 指定CFile::typeBinary没?
利用线程 完整的发/接例程 我有,需要的话,短消息与我

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧