windows套接字服务提供者想应用程序设计者导出 先进的数据传输功能 1 GetAcceptExSockaddrs函数 粘贴从AcceptEx函数取得的数据,将本地和远程地址传递到sockaddr结构 2 TransmitFile...函数 在一个已连接的套接字句柄上传输文件数据 3 TransmitPackets函数 与TransmitFile类似,不同之处是,既可以发送文件,也可以发送内存缓冲区中的数据 4 ConnextEx函数
在Winsock中为此而专门提供了一个高效传输文件的API——TransmitFile。...上图揭示了TransmitFile能够高效工作的秘密,一般我们来封装这个功能的时候会调用ReadFile,此时由内核层读取文件并将文件文件内容保存在内核的内存空间中,然后通过系统调用们将内容拷贝到R3层...而TransmitFile则相对要高效的多,既然最终是要发送文件,那么它将内容从文件中读取出来后直接将R0层中保存的文件内容通过SOCKET发送出去,有的时候直接采用文件映射的方式将磁盘地址映射到网卡中...这个时候TransmitFile就不再有效了。...请注意TransmitFile的第三个参数 nNumberOfBytesToWrite 是一个DWORD类型,这也就标明这个函数最大只能发送4GB的文件,而对于更大的文件它就无能为力了,为了发送更大的文件
protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用...Content-Disposition", "attachment;filename=z.zip"); string filename = Server.MapPath("DownLoad/aaa.zip"); Response.TransmitFile
filePath = Server.MapPath(“”);//路径 return File(filePath, “text/plain”, “”//是客户端保存的文件名字); } (3)TransmitFile...Response.ContentEncoding = System.Text.Encoding.GetEncoding(“gb2312”); //获取或设置输出流的 HTTP 字符集 15 Response.TransmitFile
TransmitFile....Now that socket.sendfile() is in place it seems natural to add support for it as well (see TransmitFile
在实现的WriteFile方法中,FilePathResult直接将文件路径作为参数调用当前HttpResponse的TransmitFile实现了针对文件内容的响应。...protected override void WriteFile(HttpResponseBase response) 7: { 8: response.TransmitFile
主要的区别是FilePathResult使用HttpResponse.TransmitFile来将文件写入Http输出流。这个方法并不会在服务器内存中进行缓冲,所以这对于发送大文件是一个不错的选择。...于此同时, TransmitFile还有一个bug,这可能导致文件传到客户端一半就停了,甚至无法传送。而FileStreamResult在这方面就很棒了。
string filename = Server.MapPath("~/DownLoad/IE8/IE8-WindowsXP-x86-CHS.exe"); Response.TransmitFile
这个补丁引入了TransmitFile方法,它把一个磁盘文件读入到较小的内存缓冲区之后就开始传输该文件。尽管这个方案解决了内存和循环的问题,但是它仍然不能令人满意。你不能控制响应的生命周期。...更糟的是,如果下载的确失败了,TransmitFile方法又从客户端下次尝试的文件头部开始下载。
WSAIoctl (ioctlsocket的等价函数) WSARecvMsg (recv OOB版的等价函数) AcceptEx (accept 等价函数) ConnectEx (connect 等价函数) TransmitFile
同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Microsoft将在以后版本的windows里。
同样的道理,WSARecv()也会涉及到从用户态到内核态切换的问题 --- 这样就使得我们不得不频繁的在用户态到内核态之间转换,效率低下…… 而一个非常好的解决方案是使用微软提供的扩展函数TransmitFile...()来传输文件,因为只需要传递给TransmitFile()一个文件的句柄和需要传输的字节数,程序就会整个切换至内核态,无论是读取数据还是发送文件,都是直接在内核态中执行的,直到文件传输完毕才会返回至用户态给主进程发送通知
同样的道理,WSARecv()也会涉及到从用户态到内核态切换的问题 — 这样就使得我们不得不频繁的在用户态到内核态之间转换,效率低下…… 而一个非常好的解决方案是使用微软提供的扩展函数TransmitFile...()来传输文件,因为只需要传递给TransmitFile()一个文件的句柄和需要传输的字节数,程序就会整个切换至内核态,无论是读取数据还是发送文件,都是直接在内核态中执行的,直到文件传输完毕才会返回至用户态给主进程发送通知
领取专属 10元无门槛券
手把手带您无忧上云