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

xyz666 xyz666 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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;

}

还有为什么大文件就不能读写了???
请高人指点。下次在好好给分。
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
xyz666
VC/MFC 16,550 成员 421,606 内容