操做系統,windows編程,網絡,socket

首發:我的博客,更新&糾錯&回覆javascript

以前關於c/s的一篇博文只記了思路沒記代碼,並且表達不清晰,過後看不知所云,這個習慣要改。java

這十幾天學了點關於操做系統、windows編程和網絡,主要看的書有如下幾本,都沒看完或者只看了一點,記下書名先:
《現代操做系統》
《深刻解析windows操做系統》
《windows程序設計》
《c#入門經典》
《wpf編程寶典》
《圖解tcp/ip》
另外《tcp/ip詳解》《java網絡編程》《netty權威指南》是準備接下來看的。android

1.操做系統
應用程序硬件之間的夾層,向上暴露方便編程的接口,向下管理硬件。
核心的核心:進程地址空間文件,這三者分別是CPU內存硬盤的抽象。
進程線程都是容器,CPU在多個容器間往來穿梭,就像有多個CPU似的。git

2.windows
分爲用戶態內核態,重要代碼運行在內核態,應用程序運行在用戶態,應用程序經過調用api進行編程。具體見《深刻解析windows操做系統》。
windows api編程,mfc編程,form編程,wpf編程。界面編程技術愈來愈多了,但學api編程仍是有用,會理解底層原理。讀《windows程序設計》吧。
c#跟java很像,但強大不少,像是java+語法糖同樣,《c#入門經典》是入門書。
如今好像推薦wpf編程而不是使用form了,《wpf編程寶典》是爲了湊單買的,好厚一本,躺着無法讀。github

3.網絡
傳輸層的tcp協議和網絡層的ip協議是最關鍵的,不過《圖解tcp/ip》不像《圖解http》那樣簡單可愛,多是由於原本就更復雜的緣故。
還要再讀讀,還有最有名的《tcp/ip詳解》。
雖然我java用了好久,但除了web以外的網絡編程其實很少,《java網絡編程》和《netty權威指南》應該讀讀。nio這塊的課也該補一下。web

4.一個demo
socket編程其實足以用來開發各類c/s程序,上次博文代碼找不到了,此次從新寫,恰好還學了點兒windows編程,就用wpf作個exe程序的客戶端,這回真像c/s程序了。
socket處於應用層和傳輸層之間,提供使用tcp協議的可能性,由應用層的程序代碼調用。
雙向傳輸中的「讀」這塊,因爲while(xx.readLine)是阻塞的,因此客戶端和服務端都須要使用一個專門線程用於等待響應。
線程就像是人,傳統單線程程序比如只有一我的的公司,每多一個線程就比如多一個員工,這樣同一個時間能夠真正同時作多件事了,尤爲是阻塞這種「須要有我的傻等」的狀況。CPU是大腦,而進程、線程是對CPU的抽象,多進程/線程就像多大腦,能齊頭並進地處理事情,當你發現你的程序須要多個大腦,就採用多線程吧。
代碼在這裏,包括了java和c#的客戶端,以及用java寫的服務器。編程

java寫的服務器打成可執行jar包,而後寫個bat腳本,內容以下:c#

call java -jar myServer.jarwindows

就能方便地啓動了。api

 

c#的程序最讓我驚豔的是函數是一等對象了:
這行(doClose是個函數)

this.Closing += doClose;

和這行(doReceive是個函數)

receiveThread = new Thread(doReceive);

的寫法都讓人感到好舒服。
而後下面是相似android的代碼,新線程想改變控件內容不能直接改,由於控件屬於主線程。

this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,(ThreadStart)delegate ()
{
    theLabel.Content = msg;
}
);

「委託」這東西我感受就像javascript裏所謂的函數字面量,或者java中的匿名內部類(用來提供方法體的)。

長期歡迎項目合做機會介紹,項目收入10%用於酬謝介紹人。新浪微博:@冷鏡,QQ:908789432

相關文章
相關標籤/搜索