社区
网络编程
帖子详情
关于是TransmitFile函数的使用方法
lbird
2002-11-10 04:39:06
1、WSAAsyncSelect模式下能不能使用该函数
2、当发送文件较大时,接收方应如何接收
3、谁能给出具体的代码,我不要整个程序,
只要写出传输双方跟这个调用有关的的局部代码
得到答案马上给分
...全文
781
6
打赏
收藏
关于是TransmitFile函数的使用方法
1、WSAAsyncSelect模式下能不能使用该函数 2、当发送文件较大时,接收方应如何接收 3、谁能给出具体的代码,我不要整个程序, 只要写出传输双方跟这个调用有关的的局部代码 得到答案马上给分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lbird
2002-11-14
打赏
举报
回复
huangbeyond:
非常感谢!你能不能回答第一个问题,还有用FTP传输入速度会不会更慢
huangbeyond
2002-11-14
打赏
举报
回复
第一个问题:可以在WSAAsyncSelect模式下运用.
但是据我个人理解,该函数一般是由服务端提供,比如HTTP服务器等;客户端,是很少使用这个函数的.那么,WSAAsyncSelect模型绝对不是服务器的优秀选择!!
使用FTP,速度和TransmitFile相差是不大的.毕竟在现在,影响速度不是CPU和硬盘,而是网络带宽.
huangbeyond
2002-11-12
打赏
举报
回复
这个函数,我在"WINSOCK IO完成端口"模型里使用过.即:传送方是完成端口模型,是服务器;接收方是WSAEventSelete模型,是客户端.
从内核态来说,TransmitFile只是"ReadFile-send-ReadFile-send......"的高效封装.换句换说,当该函数运行时,接收端只需要循环地调用recv,把数据接收过来就可以了.而每一次接收的缓冲区尺寸,就是该函数的nNumberOfBytesPerSend 参数,写过网络的人都明白,这种C/S的同步是必然的.
需要注意的细节:
1.注意两边的nNumberOfBytesPerSend 值要相同;
2.服务端在执行TransmitFile前,先用一个DWORD把文件尺寸传给客户端(使用lpTransmitBuffers 参数就可以了),否则,客户端是不会知道什么才是文件传输完毕的标志(或者,可以把"连接断开"做为标志,即服务端在传输完毕之后,就关闭该SOCKET);
3.至于超大尺寸文件(几十--上百M),为保险起见,还是使用FTP吧.因为TransmitFile不支持"断点继传".
lbird
2002-11-12
打赏
举报
回复
icelight:
1,你的代码是否已经过测试
2,当这个文件很大时,比如有几十,上百兆时,收发双方应注意到哪些细节? 能不能详细点
icelight
2002-11-12
打赏
举报
回复
1.只要WSAAsyncSelect用的是面向连接的协议,就能用这个函数。
BOOL TransmitFile(
SOCKET hSocket,
HANDLE hFile,
DWORD nNumberOfBytesToWrite,
DWORD nNumberOfBytesPerSend,
LPOVERLAPPED lpOverlapped,
LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
DWORD dwFlags
);
参数:
hSocket
面向连接的SOCKET句柄。
hFile
已打开的文件句柄
nNumberOfBytesToWrite
要传送的字节数。0值表示传送整个文件。
nNumberOfBytesPerSend
每次传送的数据块的大小。0值表示使用SOCKET LAYER的默认值。
lpOverlapped
指向OVERLAPPED结构的指针。NULL值表示不开启overlapped I/O模式。
lpTransmitBuffers
指向TRANSMIT_FILE_BUFFERS结构指针。NULL值表示仅仅传输文件。
dwFlags
有三个值可选TF_DISCONNECT TF_REUSE_SOCKET TF_WRITE_BEHIND
给出接收端的代码:
SOCKET socketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
bind(socketListen,NULL,0);
listen(socketListen,SOMAXCONN);
SOCKET socketRead = accept(socketListen,NULL,0);
char sz[1000000];
while(true)
{
if(recv(socketRead,sz,strlen(sz))==SOCKET_ERROR )
break;
//写入文件
}
发送端代码
connect...
TransmitFile(hSocket,hFile,0,0,0,NULL,TF_DISCONNECT );
lbird
2002-11-11
打赏
举报
回复
没人能帮帮我吗
Socket三个循序渐进工程自作(单向通信,双向通信,双向文件传输)
程序补丁、程序补丁、程序补丁、程序补丁、程序补丁、程序补丁、 分别在SendSocket和ReceiveSocket
函数
里加上Sleep(0)即可修补由于文件过大导致的错误。Sleep(0):提交控制权 Simplex 单工通信 Full-Duplex 全双工通信
Tran
smi
t
File
双向文件传输 大文件传输过程发现接收端和发送端得到的文件大小不一致,而且收到的文件大小也在变,几个M的mp3没什么影响,但是如果是500m视频影响进度条。没有解决这个问题。 前面两个工程必须先打开服务器
Tran
smi
t
File
函数
的简单
使用
简述
Tran
smi
t
File
是一个扩展的 API,它允许在套接字连接上发送一个打开的文件。这使得应用程序可以避免亲自打开文件,重复地在文件执行读入操作,再将读入的那块数据写入套接字。相反,已打开的文件的句柄和套接字连接一起给出的,在套接字上,文件数据的读入和发送都在模式下进行。这就避免了多次的用户/内核模式切换。与linux的send
file
函数
类似。
Tran
smi
t
File
通过已经连接的SO...
使用
Tran
smi
t
File
函数
需要注意的几点
Tran
smi
t
File
是专门用来进行文件传输的
函数
,它的优势在于在内核将文件句柄和套接字联系起来进行发送,避免了将文件内容读到应用层再写到内核的过程,提高了效率。
函数
声明如下: BOOL
Tran
smi
t
File
( SOCKET hSocket, HANDLE h
File
,
Tran
smi
t
File
()
函数
实现 Demon
Tran
smi
t
File
()
函数
是 Windows 操作系统中提供的一个用于高效传输文件内容的
函数
。它可以在不
使用
缓存的情况下直接从文件中读取数据并将其发送到网络连接。它
使用
了 Windows 底层的 I/O 和网络功能,可以在传输文件时减少系统开销,提高传输性能。 该
函数
接受三个参数: 第一个参数是一个已经打开的 socket 文件描述符,表示要发送文件的网络连接。 第二个参数是一个 HAN...
windows下
使用
Tran
smi
t
File
传输文件并接收的
方法
在工作中为了高效的上传下载文件,我
使用
到了
Tran
smi
t
File
这个API,它允许在套接字连接上发送一个打开的文件。这使得应用程序可以避免亲自打开文件,重复地在文件执行读入操作,再将读入的那块数据写入套接字。 在
使用
过程中需要服务器和客户端两个部分,服务器运行起来后监听socket端口,当有套接字链接进入后便开始读取字节流,需要注意的是Tan
smi
t
File
的参数: BOOL PASCAL ...
网络编程
18,356
社区成员
64,210
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章