㈠ .net Response.TransmitFile() 的问题
这个方法加载css没用过,以前用它做过下载,如果想加载css的话可以用@import方法
建个base.css,里面引用其他css就可以了。
㈡ 用c#怎样从服务器下载文件,并保存为相应的类型
C#从服务器下载文件可以使用多种方法。以下是一些常见的技术:
1. 使用`TransmitFile`方法:
这种方法适用于大文件下载,因为它解决了使用`Response.BinaryWrite`下载超过400MB文件时,ASP.NET进程可能会被回收的问题。示例代码如下:
```csharp
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath("DownLoad/z.zip");
Response.TransmitFile(filename);
}
```
2. 使用`WriteFile`方法:
这种方法适用于简单文件下载。示例代码如下:
```csharp
protected void Button2_Click(object sender, EventArgs e)
{
string fileName = "asd.txt"; // 客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt"); // 文件路径
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
```
3. 分块下载使用`WriteFile`方法:
这种方法适用于大型文件,可以分块读取以减轻服务器的压力。示例代码如下:
```csharp
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt"; // 客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt"); // 文件路径
FileInfo fileInfo = new FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400; // 100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
Response.Clear();
FileStream iStream = File.OpenRead(filePath);
long dataLengthToRead = iStream.Length; // 获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize)); // 读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
```
4. 使用流方式下载:
这种方法通过流的方式来下载文件,适用于各种大小的文件。示例代码如下:
```csharp
protected void Button4_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt"; // 客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt"); // 文件路径
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
```
这些方法可以根据文件的大小和需求进行选择,以确保高效和稳定地从服务器上下载文件。
㈢ c#从服务器读文件的问题
C#从服务器上面读取文件,然后下载到本地可以用WriteFile()或者TransmitFile()方法实现,代码如下:
//1、TransmitFile实现下载
protectedvoidButton1_Click(objectsender,EventArgse)
{
/*
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
代码如下:
*/
Response.ContentType="application/x-zip-compressed";
Response.AddHeader("Content-Disposition","attachment;filename=z.zip");
stringfilename=Server.MapPath("DownLoad/z.zip");
Response.TransmitFile(filename);
}
//2、WriteFile实现下载
protectedvoidButton2_Click(objectsender,EventArgse)
{
/*
usingSystem.IO;
*/
stringfileName="asd.txt";//客户端保存的文件名
stringfilePath=Server.MapPath("DownLoad/aaa.txt");//路径
FileInfofileInfo=newFileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition","attachment;filename="+fileName);
Response.AddHeader("Content-Length",fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding","binary");
Response.ContentType="application/octet-stream";
Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
㈣ C#实现下载功能
//TransmitFile实现下载
protected void Button1_Click(object sender, EventArgs e)
{
// 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
//下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath("DownLoad/z.zip");
Response.TransmitFile(filename);
}
//WriteFile实现下载
protected void Button2_Click(object sender, EventArgs e)
{
//using System.IO;
string fileName = "asd.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
FileInfo fileinfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.AddHeader("Content-Length", "attachment;filename=" + fileName);
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileinfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
System.IO.FileInfo fileinfo = new System.IO.FileInfo(filePath);
if (fileinfo.Exists == true)
{
const long ChunkSize = 102400;//100k每次读取文件,只读取100k,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
//流方式下载
protected void Button4_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
}
㈤ 求推荐一本 VC++网络编程 的好书
Windows网络与通信程序设计(第2版)王艳平这本书写的非常好,我有本王艳平写的windows程序设计,写得很好,我自己不做网络开发,就没有买网络的那本书!不过推荐你看看,真的很不错!
本书将编程方法、网络协议和应用实例有机结合起来,详细阐明Windows网络编程的各方面内容。本书首先介绍Windows平台上进行网络编程的基础知识,包括网络硬件、术语、协议、Winsock编程接口和各种I/O方法等;然后通过具体实例详细讲述当前流行的高性能可伸缩服务器设计、IP多播和Internet广播、P2P程序设计、原始套接字、SPI、协议驱动的开发和原始以太数据的发送、ARP欺骗技术、LAN和WAN上的扫描和侦测技术、个人防火墙与网络封包截获技术等;最后讲述IP帮助函数和E-mail的开发方法。本书结构紧凑,内容由浅入...
第1章计算机网络基础1
1.1网络的概念和网络的组成1
1.2计算机网络参考模型2
1.2.1协议层次2
1.2.2TCP/IP参考模型2
1.2.3应用层(ApplicationLayer)3
1.2.4传输层(TransportLayer)3
1.2.5网络层(NetworkLayer)3
1.2.6链路层(LinkLayer)4
1.2.7物理层(PhysicalLayer)4
1.3网络程序寻址方式4
1.3.1MAC地址4
1.3.2IP地址5
1.3.3子网寻址6
1.3.4端口号8
1.3.5网络地址转换(NAT)8
1.4网络应用程序设计基础10
1.4.1网络程序体系结构10
1.4.2网络程序通信实体11
1.4.3网络程序开发环境12
第2章Winsock编程接口13
2.1Winsock库13
2.1.1Winsock库的装入和释放13
2.1.2封装CInitSock类14
2.2Winsock的寻址方式和字节顺序14
2.2.1Winsock寻址14
2.2.2字节顺序16
2.2.3获取地址信息17
2.3Winsock编程详解20
2.3.1Winsock编程流程20
2.3.2典型过程图23
2.3.3TCP服务器和客户端程序举例24
2.3.4UDP编程26
2.4网络对时程序实例28
2.4.1时间协议(TimeProtocol)28
2.4.2TCP/IP实现代码29
第3章Windows套接字I/O模型31
3.1套接字模式31
3.1.1阻塞模式31
3.1.2非阻塞模式31
3.2选择(select)模型32
3.2.1select函数32
3.2.2应用举例33
3.3WSAAsyncSelect模型36
3.3.1消息通知和WSAAsyncSelect函数36
3.3.2应用举例37
3.4WSAEventSelect模型40
3.4.1WSAEventSelect函数40
3.4.2应用举例42
3.4.3基于WSAEventSelect模型的服务器设计44
3.5重叠(Overlapped)I/O模型53
3.5.1重叠I/O函数53
3.5.2事件通知方式56
3.5.3基于重叠I/O模型的服务器设计56
第4章IOCP与可伸缩网络程序67
4.1完成端口I/O模型67
4.1.1什么是完成端口(completionport)对象67
4.1.2使用IOCP的方法67
4.1.3示例程序69
4.1.4恰当地关闭IOCP72
4.2Microsoft扩展函数72
4.2.1GetAcceptExSockaddrs函数73
4.2.2TransmitFile函数73
4.2.3TransmitPackets函数74
4.2.4ConnectEx函数75
4.2.5DisconnectEx函数76
4.3可伸缩服务器设计注意事项76
4.3.1内存资源管理76
4.3.2接受连接的方法77
4.3.3恶意客户连接问题77
4.3.4包重新排序问题78
4.4可伸缩服务器系统设计实例78
4.4.1CIOCPServer类的总体结构78
4.4.2数据结构定义和内存池方案82
4.4.3自定义帮助函数85
4.4.4开启服务和停止服务88
4.4.5I/O处理线程93
4.4.6用户接口和测试程序99
第5章互联网广播和IP多播100
5.1套接字选项和I/O控制命令100
5.1.1套接字选项100
5.1.2I/O控制命令102
5.2广播通信103
5.3IP多播(Multicasting)105
5.3.1多播地址105
5.3.2组管理协议(IGMP)105
5.3.3使用IP多播106
5.4基于IP多播的组讨论会实例110
5.4.1定义组讨论会协议110
5.4.2线程通信机制111
5.4.3封装CGroupTalk类111
5.4.4程序界面117
第6章原始套接字121
6.1使用原始套接字121
6.2ICMP编程121
6.2.1ICMP与校验和的计算121
6.2.2Ping程序实例124
6.2.3路由跟踪126
6.3使用IP头包含选项129
6.3.1IP数据报格式129
6.3.2UDP数据报格式131
6.3.3原始UDP封包发送实例133
6.4网络嗅探器开发实例134
6.4.1嗅探器设计原理135
6.4.2网络嗅探器的具体实现136
6.4.3侦听局域网内的密码138
6.5TCP通信开发实例140
6.5.1创建一个原始套接字,并设置IP头选项140
6.5.2构造IP头和TCP头140
6.5.3发送原始套接字数据报142
6.5.4接收数据146
第7章Winsock服务提供者接口(SPI)147
7.1SPI概述147
7.2Winsock协议目录148
7.2.1协议特性149
7.2.2使用WinsockAPI函数枚举协议150
7.2.3使用WinsockSPI函数枚举协议151
7.3分层服务提供者(LSP)153
7.3.1运行原理153
7.3.2安装LSP154
7.3.3移除LSP158
7.3.4编写LSP159
7.3.5LSP实例161
7.4基于SPI的数据报过滤实例165
7.5基于Winsock的网络聊天室开发171
7.5.1服务端171
7.5.2客户端171
7.5.3聊天室程序的设计说明172
7.5.4核心代码分析172
第8章Windows网络驱动接口标准(NDIS)和协议驱动的开发176
8.1核心层网络驱动176
8.1.1Windows2000及其后产品的网络体系结构176
8.1.2NDIS网络驱动程序177
8.1.3网络驱动开发环境178
8.2WDM驱动开发基础181
8.2.1UNICODE字符串181
8.2.2设备对象181
8.2.3驱动程序的基本结构183
8.2.4I/O请求包(I/Orequestpacket,IRP)和I/O堆栈183
8.2.5完整驱动程序示例186
8.2.6扩展派遣接口188
8.2.7应用举例(进程诊测实例)191
8.3开发NDIS网络驱动预备知识198
8.3.1中断请求级别(InterruptRequestLevel,IRQL)198
8.3.2旋转锁(SpinLock)198
8.3.3双链表199
8.3.4封包结构199
8.4NDIS协议驱动200
8.4.1注册协议驱动200
8.4.2打开下层协议驱动的适配器201
8.4.3协议驱动的封包管理202
8.4.4在协议驱动中接收数据203
8.4.5从协议驱动发送封包204
8.5NDIS协议驱动开发实例204
8.5.1总体设计204
8.5.2NDIS协议驱动的初始化、注册和卸载206
8.5.3下层NIC的绑定和解除绑定209
8.5.4发送数据217
8.5.5接收数据219
8.5.6用户IOCTL处理225
第9章网络扫描与检测技术233
9.1网络扫描基础知识233
9.1.1以太网数据帧233
9.1.2ARP234
9.1.3ARP格式236
9.1.4SendARP函数237
9.2原始以太封包的发送238
9.2.1安装协议驱动238
9.2.2协议驱动用户接口238
9.2.3发送以太封包的测试程序244
9.3局域网计算机扫描245
9.3.1管理原始ARP封包246
9.3.2ARP扫描示例249
9.4互联网计算机扫描253
9.4.1端口扫描原理253
9.4.2半开端口扫描实现254
9.5ARP欺骗原理与实现259
9.5.1IP欺骗的用途和实现原理259
9.5.2IP地址冲突260
9.5.3ARP欺骗示例261
第10章点对点(P2P)网络通信技术264
10.1P2P穿越概述264
10.2一般概念265
10.2.1NAT术语265
10.2.2中转265
10.2.3反向连接266
10.3UDP打洞267
10.3.1中心服务器267
10.3.2建立点对点会话267
10.3.3公共NAT后面的节点267
10.3.4不同NAT后面的节点268
10.3.5多级NAT后面的节点269
10.3.6UDP空闲超时270
10.4TCP打洞271
10.4.1套接字和TCP端口重用271
10.4.2打开点对点的TCP流271
10.4.3应用程序看到的行为272
10.4.4同步TCP打开273
10.5Internet点对点通信实例273
10.5.1总体设计273
10.5.2定义P2P通信协议274
10.5.3客户方程序275
10.5.4服务器方程序287
10.5.5测试程序291
第11章核心层网络封包截获技术294
11.1Windows网络数据和封包过滤概述294
11.1.1Windows网络系统体系结构图294
11.1.2用户模式下的网络数据过滤295
11.1.3内核模式下的网络数据过滤296
11.2中间层网络驱动PassThru296
11.2.1PassThruNDIS中间层驱动简介296
11.2.2编译和安装PassThru驱动297
11.3扩展PassThruNDISIM驱动——添加IOCTL接口297
11.3.1扩展之后的PassThru驱动(PassThruEx)概况297
11.3.2添加基本的DeviceIoControl接口298
11.3.3添加绑定枚举功能302
11.3.4添加ADAPT结构的引用计数307
11.3.5适配器句柄的打开/关闭函数308
11.3.6句柄事件通知315
11.3.7查询和设置适配器的OID信息315
11.4扩展PassThruNDISIM驱动——添加过滤规则323
11.4.1需要考虑的事项323
11.4.2过滤相关的数据结构324
11.4.3过滤列表326
11.4.4网络活动状态327
11.4.5IOCTL控制代码328
11.4.6过滤数据331
11.5核心层过滤实例339
第12章Windows网络防火墙开发技术342
12.1防火墙技术概述342
12.2金羽(Phoenix)个人防火墙浅析343
12.2.1金羽(Phoenix)个人防火墙简介343
12.2.2金羽(Phoenix)个人防火墙总体设计344
12.2.3金羽(Phoenix)个人防火墙总体结构345
12.3开发前的准备345
12.3.1常量的定义346
12.3.2访问规则348
12.3.3会话结构348
12.3.4文件结构349
12.3.5UNICODE支持355
12.4应用层DLL模块356
12.4.1DLL工程框架356
12.4.2共享数据和IO控制362
12.4.3访问控制列表ACL(AccessList)364
12.4.4查找应用程序访问权限的过程367
12.4.5类的接口——检查函数370
12.5核心层SYS模块373
12.6主模块工程375
12.6.1I/O控制类375
12.6.2主应用程序类377
12.6.3主对话框中的属性页380
12.6.4主窗口类381
12.7防火墙页面383
12.7.1网络访问监视页面383
12.7.2应用层过滤规则页面387
12.7.3核心层过滤规则页面397
12.7.4系统设置页面403
第13章IP帮助函数406
13.1IP配置信息406
13.1.1获取网络配置信息406
13.1.2管理网络接口408
13.1.3管理IP地址412
13.2获取网络状态信息415
13.2.1获取TCP连接表415
13.2.2获取UDP监听表418
13.2.3获取IP统计数据420
13.3路由管理427
13.3.1获取路由表427
13.3.2管理特定路由431
13.3.3修改默认网关的例子432
13.4ARP表管理433
13.4.1获取ARP表433
13.4.2添加ARP入口434
13.4.3删除ARP入口434
13.4.4打印ARP表的例子434
13.5进程网络活动监视实例438
13.5.1获取通信的进程终端438
13.5.2Netstate源程序代码439
第14章Email协议及其编程444
14.1概述444
14.2电子邮件介绍445
14.2.1电子邮件Internet的地址445
14.2.2Internet邮件系统445
14.2.3电子邮件信头的结构及分析446
14.3SMTP原理448
14.3.1SMTP原理分析448
14.3.2SMTP工作机制449
14.3.3SMTP命令码和工作原理449
14.3.4SMTP通信模型450
14.3.5SMTP的命令和应答451
14.4POP3协议原理452
14.4.1POP3协议简介452
14.4.2POP3工作原理453
14.4.3POP3命令原始码454
14.4.4POP3会话实例459
14.5实例分析与程序设计460
14.5.1总界面设计460
14.5.2SMTP客户端设计461
14.5.3POP3客户端设计473