首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

TransmitFile 发送后,客户端怎么接收

2013-01-25 
TransmitFile发送后,客户端如何接收?本帖最后由 VisualEleven 于 2013-01-04 17:19:32 编辑下面是服务器端

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);

发送的普通的字符串,是可以接收到的。

还有如果文件很大,比如10k,我的接收代码应该怎么写?


[解决办法]
你是不是用重叠IO的方式?如果是阻塞方式TransmitFile几行代码就写出一个了
只有看你代码调试下才能知道原因的,你这几行代码怎么看
liqisong611@hotmail.com

热点排行