Transmit File使用

来源:互联网 发布:qq三国卡79js最高配置 编辑:程序博客网 时间:2024/06/06 16:27
01BOOL 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参数:
11hSocket
12面向连接的SOCKET句柄。
13hFile
14已打开的文件句柄
15nNumberOfBytesToWrite
16要传送的字节数。0值表示传送整个文件。
17nNumberOfBytesPerSend
18每次传送的数据块的大小。0值表示使用SOCKET LAYER的默认值。
19lpOverlapped
20指向OVERLAPPED结构的指针。NULL值表示不开启overlapped I/O模式。
21lpTransmitBuffers
22指向TRANSMIT_FILE_BUFFERS结构指针。NULL值表示仅仅传输文件。
23dwFlags
24有三个值可选TF_DISCONNECT TF_REUSE_SOCKET TF_WRITE_BEHIND
25给出接收端的代码:
26SOCKET socketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
27bind(socketListen,NULL,0);
28listen(socketListen,SOMAXCONN);
29SOCKET socketRead = accept(socketListen,NULL,0);
30char sz[1000000];
31while(true)
32{
33  if(recv(socketRead,sz,strlen(sz))==SOCKET_ERROR )
34     break;
35  //写入文件
36}
37发送端代码
38connect...
39TransmitFile(hSocket,hFile,0,0,0,NULL,TF_DISCONNECT );
40//使用例子
41//发送端
42//发送文件
43HANDLE hFile = CreateFile(lpszFilePath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
44TransmitFile(m_Socket,hFile,0,TRANS_FILE_LENGTH,NULL,NULL,TF_DISCONNECT);
45CloseHandle(hFile);
46//接收端
47ULONG lReadSize = 0;
48char szInfo[TRANS_FILE_LENGTH] = {0};
49HANDLE hFile = CreateFile(lpszFilePah,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
50while (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}

 

原创粉丝点击