TransmitFile 发送后,客户端如何接收?
本帖最后由 VisualEleven 于 2013-01-04 17:19:32 编辑 下面是服务器端的代码如下,是从网上找的一个例子,这段代码返回值为1,不知道发送是否成功了,感觉应该是发送成功了,
BOOL TransFile(IDBVisit_Processor *pObj, PPRE_IO_DATA pIoData,PPRE_SOCKET_DATA pSocketData,DWORD dwNameLen)
{
//这一句是为nc做的,你可以修改它
pIoData->Buffer[dwNameLen-1]='\0';
strcpy(pIoData->Buffer,"E:\\1.txt");
HANDLE hFile=CreateFileA(pIoData->Buffer,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
BOOL bRet=FALSE;
if(hFile!=INVALID_HANDLE_VALUE)
{
cout<<"Transmit File "<<pIoData->Buffer<<" to client"<<endl;
pIoData->IoType=IoTransFile;
memset(&pIoData->oa,0,sizeof(OVERLAPPED));
*reinterpret_cast<HANDLE*>(pIoData->Buffer)=hFile;
//TransmitFile(pSocketData->hSocket,hFile,GetFileSize(hFile,NULL),PRE_SEND_SIZE,reinterpret_cast<LPOVERLAPPED>(pIoData),NULL,TF_USE_SYSTEM_THREAD);
TransmitFile(pSocketData->hSocket,hFile,0,PRE_SEND_SIZE,reinterpret_cast<LPOVERLAPPED>(pIoData),NULL,TF_USE_SYSTEM_THREAD);
bRet=WSAGetLastError()==WSA_IO_PENDING;
}
else
cout<<"Transmit File "<<"Error:"<<GetLastError()<<endl;
return bRet;
}
char recvbuf[1024];
while( bytesRecv == SOCKET_ERROR )
{
memset(recvbuf, 0,sizeof(recvbuf));
bytesRecv = recv( ConnectSocket, recvbuf, 1024, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET )
{
printf( "Connection Closed.\n");
break;
}
}
WSASend(pPreHandleData->hSocket,&pPreIoData->DataBuf,1, &dwRecv,dwFlags, reinterpret_cast<LPWSAOVERLAPPED>(pPreIoData),NULL);