檔案傳輸前面兩篇文章所使用的範例都是傳輸字串,有的時候我們可能會想在服務端和用戶端之間傳遞檔案 。比如,考慮這樣一種情況,假如用戶端顯示了一個菜單,當我們輸入S1、S2或S3(S為Send縮寫)時, 分別向服務端傳送檔案Client01.jpg、Client02.jpg、Client03.jpg;當我們輸入R1、R2或R3時(R為 Receive縮寫),則分別從服務端接收檔案Server01.jpg、Server02.jpg、Server03.jpg。那麼,我們該
這篇文章我們將前進一大步,使用非同步方式來對服務端編程,以使它成為一個真正意義上的伺服器 :可以為多個用戶端的多次請求服務。但是開始之前,我們需要解決上一節中遺留的一個問題。訊息發送時的問題這個問題就是:用戶端分兩次向流中寫入資料(比如字串)時,我們主觀上將這兩次寫入視為兩次 請求;然而服務端有可能將這兩次合起來視為一條請求,這在兩個請求間隔時間比較短的情況下尤其如此 。同樣,也有可能用戶端發出一條請求,但是服務端將其視為兩條請求處理。下面列出了可能的情況,假
服務端用戶端通訊在與服務端的串連建立以後,我們就可以通過此串連來發送和接收資料。連接埠與連接埠之間以流 (Stream)的形式傳輸資料,因為幾乎任何對象都可以儲存到流中,所以實際上可以在用戶端與服務端之 間傳輸任何類型的資料。對用戶端來說,往流中寫入資料,即為向伺服器傳送資料;從流中讀取資料,即 為從服務端接收資料。對服務端來說,往流中寫入資料,即為向用戶端發送資料;從流中讀取資料,即為 從用戶端接收資料。同步傳輸字串我們現在考慮這樣一個任務:用戶端列印一串字串,然後發往服務端,服務端先輸出它,
引言C#網路編程系列文章計劃簡單地講述網路編程方面的基礎知識,由於本人在這方面功力有限,所以只 能提供一些初步的入門知識,希望能對剛開始學習的朋友提供一些協助。如果想要更加深入的內容,可以 參考相關書籍。本文是該系列第一篇,主要講述了基於通訊端(Socket)進行網路編程的基本概念,其中包括TCP協議 、通訊端、聊天程式的三種開發模式,以及兩個基本操作:偵聽連接埠、串連遠程服務端;第二篇講述了一 個簡單的範例:從用戶端傳輸字串到服務端,服務端接收並列印字串,將字串改為大寫,然後再將
abstractabstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。在類聲明中使用 abstract 修飾符以指示類只能是其他類的基類。抽象類別具有以下特性:·抽象類別不能執行個體化。·抽象類別可以包含抽象方法和抽象訪問器。·不能用 sealed 修飾符修改抽象類別,這意味著該類不能被繼承。·從抽象類別派生的非抽象類別必須包括繼承的所有抽象方法和抽象訪問器的實實現。·在方法或屬性聲明中使用 abstract
最近開始學習無鎖編程,和傳統的基於Lock的演算法相比,無鎖編程具有其獨特的優點,Angel Lucifer 的關於無鎖編程一文對此有詳細的描述。無鎖編程的目標是在不使用Lock的前提下保證並發過程中共用資料的一致性,其主要的實現基礎是CAS 操作,也就是compare_and_swap,通過處理器提供的指令,可以原子地更新共用資料,並同時監測其他線
實現原理:1、我們現在要做的是自訂Web控制項,這和平常設計aspx網頁或者使用者控制項有本質區別,自訂控制項 是一個派生自System.Web.WebControls.WebControl的類,它是一個類,而不是你想象中的HTML代碼,甚 至在自訂控制項中你完全找不到HTMl的任何風格。因此,你必須對類的編寫設計非常數量,或者是,跳出 設計HTML的圈子,拓展思維!2、我們要實現不依靠檔案系統、不依靠額外的任何其他東西,僅僅依靠一個類來實現它,這樣做好處
一、寫在前面C# 語言是一種簡單但功能強大的程式設計語言,用於編寫公司專屬應用程式程式。C# 語言從C和C++語言演化而來,在語句、運算式和運算子方面使用了許多C++ 功能。C# 語言在型別安全、版本轉換、事件和記憶體回收等方面進行了相當大的改進和創新。C# 語言提供對常用API 樣式(如 .NET 架構、COM、自動化和 C 樣式 API
看到這標題的朋友可能搞不懂到底在搞什麼,不過不要緊有興趣的朋友可以先瞭解一下 IVsSingleFileGenerator到底是用來做什麼用的《實現自訂的VsSingleFileGenerator 》;在vs.net裡 提供一個IVsSingleFileGenerator介面可以方便地為專案檔產生附屬檔案,如剛才那文章提到的根據XML 檔案自動產生一個附屬的C#代碼檔案;當然這個IVsSingleFileGenerator並不只是針對XML檔案,可以是隨
1、簡介能夠動態執行 C# 代碼是一件很酷的功能,比如,我們可以在控制台中輸入一行 C# 代碼,然後程式 自動編譯並執行這一行代碼,將結果顯示給我們。這差不多就是一個最簡單的 C# 代碼解譯器了。動態執行 C# 代碼又是一件很有用的功能,比如,我們可以將某些代碼寫在某個檔案之中,由程式集 在執行時進行載入,改變這些代碼不用中止程式,當程式再次載入這些代碼時,就自動執行的是新代碼了 。下面,我將在寫一個簡單C# 代碼解譯器,然後將在 C# 代碼解譯器之中加入動態代碼與解譯器環境間 的動態互動機制,
最近,看到打聽鷹眼問題的朋友特別多。AE+C#的鷹眼在網上代碼已經很多了,我今天也放一個版本上 來,主要有以下幾個功能:1.主地圖視窗視圖範圍改變後,鷹眼視窗繪製一個紅色的框顯示目前範圍;2.主地圖比例尺發生改變後,鷹眼地圖的比例尺也發生改變,只是改變的程度將小而已;(這和網上其 它代碼不同,借鑒google地圖鷹眼的顯示效果)3.在鷹眼地圖上,用滑鼠左鍵可以移動紅色的地區框,鬆開滑鼠後,主視窗地圖視圖範圍更新為移動
在.net中使用system.diaglostics.Process可以用來調用另一個命令列或程式。using
最近把計算機完善了一下,添加了變數的支援,添加了更多的函數,把邏輯短路操作也實現了,並修正了一些小錯誤。想起來以前在一本書 裡看到過一個樣本,輸入函數運算式,就可以繪製函數的波形。最開始學VB的時候,就喜歡用函數來畫圖。再加上對電子技術有點興趣,很多 波形都可以用函數來表示,很自然就想到用程式來類比示波器顯示波形。但是因為函數都需要在代碼裡面寫死,如果需要新增函數或者進行修 改,需要修改程式碼再編譯運行。既然現在可以做到對錶達式進行計算,也可以支援變數,那麼讓變數的值變化就可以計算得到不同的值,
前面幾篇文章介紹了各種分析過程,本篇作為完結篇,介紹如何調用之前實現的代碼,如何?多行運算式或者選擇部分運算式進行運算, 以及如何定位錯誤。本程式可以不需要UI介面,獨立成一個模組。如果運算式分析與計算功能打包成一個dll,那入口只有一個,SyntaxAnalyse類。new一個 SyntaxAnalyse類之後,調用其中的Analyse方法,將要計算的運算運算式作為參數傳遞進去,返回一個頂級TokenRecord對象,再根據返回的
上一篇中介紹通過詞法分析將運算式轉換成TokenRecord對象列表。在第一篇中提到將運算式用樹形結構表示,然後就可以很方便的從下級 節點取值計算了。那麼如何將列表分析成一棵樹的結構呢?還是以例子來說明,比如3*7+56/8-2*5,分析成TokenRecord列表就是 記號對象 對應運算式 TokenValue 3
承接上一篇,這一篇講如何把運算式轉換成記號對象,這裡就涉及到了編譯原理中的詞法分析。關於編譯原理我不想多講,畢竟我自己也不 怎麼熟悉,現在只知道其中有個有限自動機的概念。不管什麼概念,用代碼實現才是最終目標。因為不清楚字串中到底包含什麼字元,只能一個個字元進行處理,採用迴圈一次次向後取一個字元進行判斷。這裡建立一個TokenFactory 記號“工廠”類,由這個類負責對錶達式進行分析並“生產”出TokenRecord對象。其中包括兩個方法,
Microsoft自Windows Vista一起發布了IIS 7.0,這個已經是去年的話題了,隨後,由.NET開發的Web 程式便逐步從IIS 6.0過渡到IIS 7.0上了。IIS 7.0提供了很多比上一版本更多的新特性,包括完全模組 化的組件、文字檔的配置功能、MMC圖形模式管理工具等等,並且與.NET程式設計語言結合得更加緊密了, 在新添加的Microsoft.Web.Administration名稱空間中也增加了很多用於管理和訪問IIS的對象,從而使 得通過編程方式操作IIS更加簡便。
一個項目中,客戶要求實現給集團公司員工傳送簡訊如,拜年簡訊等。另,支援給領導發送語音簡訊 。實現方法如下。1、群發簡訊有幾種方式:1.1 簡訊貓:一個普通的工控機,插入SIM卡,可以通過介面的方式傳送簡訊,點對點發送,到達 率快準確,但是呼出的號碼是普通的手機號碼。缺點:移動對SIM卡的限制是每小時200條,發送太多會 鎖卡。目前簡訊貓有8連接埠的,即1小時最多能發送1600條。每條簡訊的價格為0.1元。技術實現:
我們在做winform應用的時候,大部分情況下都會碰到使用多線程式控制制介面上控制項資訊的問題。然而我 們並不能用傳統方法來做這個問題,下面我將詳細的介紹。首先來看傳統方法:public partial class Form1 : Form{ public Form1() { InitializeComponent(); } private void Form1_Load(object sender,
.NET Framework中的大多數容器都是序列式容器(sequence containers):它們按順序儲存物件。這 種類型的容器功能很多——你可以以任何特殊的順序來儲存任意數量的對象。然而,這種多功能性是以一定的效能為代價的。在一個序列中尋找一個特殊的對象所需要的時間取決 於容器中對象的數量。如果我們沒有對容器中元素進行排序,那麼隨著元素數量的增加,你所需要的尋找 時間也就直線增加了:如果容器中元素的數量增加了一倍,那麼你用來尋找一個特殊元素的時間也就增加