㈠ .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