Transmit File使用

    技术2025-06-03  86

    01 BOOL TransmitFile( 02    SOCKET hSocket,                             03    HANDLE hFile,                               04    DWORD nNumberOfBytesToWrite,                05    DWORD nNumberOfBytesPerSend,                06    LPOVERLAPPED lpOverlapped,                  07    LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,  08    DWORD dwFlags                               09 ); 10 参数: 11 hSocket 12 面向连接的SOCKET句柄。 13 hFile 14 已打开的文件句柄 15 nNumberOfBytesToWrite 16 要传送的字节数。0值表示传送整个文件。 17 nNumberOfBytesPerSend 18 每次传送的数据块的大小。0值表示使用SOCKET LAYER的默认值。 19 lpOverlapped 20 指向OVERLAPPED结构的指针。NULL值表示不开启overlapped I/O模式。 21 lpTransmitBuffers 22 指向TRANSMIT_FILE_BUFFERS结构指针。NULL值表示仅仅传输文件。 23 dwFlags 24 有三个值可选TF_DISCONNECT TF_REUSE_SOCKET TF_WRITE_BEHIND 25 给出接收端的代码: 26 SOCKET socketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 27 bind(socketListen,NULL,0); 28 listen(socketListen,SOMAXCONN); 29 SOCKET socketRead = accept(socketListen,NULL,0); 30 char sz[1000000]; 31 while ( true ) 32 { 33    if (recv(socketRead,sz, strlen (sz))==SOCKET_ERROR ) 34       break ; 35    //写入文件 36 } 37 发送端代码 38 connect... 39 TransmitFile(hSocket,hFile,0,0,0,NULL,TF_DISCONNECT ); 40 //使用例子 41 //发送端 42 //发送文件 43 HANDLE hFile = CreateFile(lpszFilePath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 44 TransmitFile(m_Socket,hFile,0,TRANS_FILE_LENGTH,NULL,NULL,TF_DISCONNECT); 45 CloseHandle(hFile); 46 //接收端 47 ULONG lReadSize = 0; 48 char szInfo[TRANS_FILE_LENGTH] = {0}; 49 HANDLE hFile = CreateFile(lpszFilePah,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); 50 while (hFile != INVALID_HANDLE_VALUE) 51 { 52    int iSize = recv(m_Socket,szInfo,TRANS_FILE_LENGTH,0); 53    if (iSize==SOCKET_ERROR||iSize==0) 54    { 55     CloseHandle(hFile); 56     break ;   57    } 58    else if (iSize<TRANS_FILE_LENGTH) 59    { 60     WriteFile(hFile,szInfo,iSize,&lReadSize,NULL); 61     CloseHandle(hFile); 62     break ; 63    } 64    //写入文件 65    WriteFile(hFile,szInfo,iSize,&lReadSize,NULL); 66 }

     

    最新回复(0)