为什么我以下程序只能写.txt文件???急求答案,先谢谢了???只有这些分了555
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;
}
还有为什么大文件就不能读写了???
请高人指点。下次在好好给分。