學校開始學習Socket編程,雖然自己搞的是ASP.NET,但是對Socket也有很大的興趣,一直不知道如何入門,剛好藉此機會跟着學習。Socket的概念就不多寫了,Windows環境下的Socket編程是WinSock,現在基本上是2.0,以前還有1.1版,但我想3.0是不會出來了。WinSock繼承了伯克利開發的BSD Unix Socket的規範,所以過程都是一樣的。WinSock編程一般都“異步非阻塞模式”,現在還未學習到這裏,我也不知道如何調用,以後再繼續討論。
關於同步、異步、阻塞、非阻塞。
同步:所有Socket客戶端的請求,在得到Socket服務器端的響應後,才返回,繼續執行下面的指令。
異步:所有Socket客戶端的請求,不用等到Socket服務器端的響應後,就可以返回,繼續執行下面的指令。
阻塞模式:調用如recive()函數時,當緩衝區沒有內容,該線程掛起,無法繼續執行,直到緩衝區有內容爲止。
非阻塞模式:調用如recive()函數時,當緩衝區沒有內容,立即返回,並返回錯誤代碼。
這是今天看了一天才入門的C# Socket成果,金旭亮老師的博客給了我很大的幫助。
Socket程序一般是沒有OO的,遵循函數式的編寫方式。
客戶端代碼:
服務器端代碼:
服務器代碼先執行,客戶端代碼後執行。
這個例子中還沒有實現socket異常處理機制,也沒有實現處理多個併發服務的效果(當同時連接兩個客戶端,後連接的就無反應了,因爲服務器處理在Recive()處阻塞,一直等待先連接的客戶端發送消息,後連接的始終在隊列中等待)。