昨天到今天幾乎都在做這個問題,利用socket設計乙個簡單的聊天工具。現在可以說是成功了80%了。並通過學習這方面知識還補充了一些mfc和網路方面的知識,一舉好幾得。但是眼睛有點疲勞,因為對著顯示器的時間長了嘛!
乙個最大的體會就是原來乙個聊天程式並沒有我以前想象的那麼難啊,計算機這東西怪不得有人說它是知者不難,難者不知。
首先就說一下基於udp協議的設計方法吧(聊天程式要求具有較高的即時性,因此也多半採用udp協議,tcp協議連線起來比較複雜,需要經過「三次握手」等一系列比較複雜的程式)。如果是設計字元介面的程式那就比較簡單了。首先就是載入套接字型檔,然後是建立套接字,這兩步對於伺服器端和客戶端來說都是一樣的。接下來就有一些不同的地方了。對於伺服器端的程式來說,必須將套接字與本地ip位址繫結。然後就等著接收資料吧。採用的函式是recvfrom函式。當然這個時候還要設定乙個用於記錄傳送端位址的變數。型別可以為sockaddr_in。而對於客戶端來說主要就是進行資料傳送。它不需要進行套接字的繫結。只需要將伺服器方的位址設定好,使用sendto函式,傳送資料就可以了。在這兩個程式的最後都要關閉套接字,呼叫closesocket()和wsacleanup()函式。
如果是圖形介面的程式則比較複雜一點,因為還涉及到一些mfc訊息響應,傳遞,獲取控制代碼的方法。現在我都還有一些東西沒搞明白。還應採用多執行緒的程式設計技術,也就模糊了服務端與客戶端的界限了。
其次是基於tcp協議的伺服器端設計方法,它的步驟為
建立套接字(socket)
將套接字繫結到乙個本地位址和埠上(bind)。
將套接字設為監聽模式,準備接收客戶請求(listen)。
等待客戶請求到來,當請求到來後接受連線請求,返回乙個新的對應於此次連線請求的套接字(accept)。
用返回的套接字和客戶端進行通訊(send/recv)。
返回,等待另一客戶請求。
關閉套接字。
客戶端的設計同樣也是比較的簡單的基本步驟也可概括為
建立套接字(socket)
向伺服器發出連線請求(connect)
和伺服器端進行通訊(send/recv)
關閉套接字。
以上就是基於tcp協議的socket程式設計步驟。的確不難吧。其核心原**也不過幾行。不管是tcp還是udp我覺得他們的原理都是差不多的。
從這個地方開始,我覺得我對網路監聽方面的知識產生了興趣。準備進一步學習一下那一方面的知識。要學計算機網路了,那些東西學一下應該是有用的。
網路程式設計(初學)
目錄 二 網路協議的五層模型 三 寫乙個客戶端和服務端的例子 b browser s server 瀏覽器 服務端,例如京東 天貓 b s架構本質也是c s架構 現在學習網路程式設計就是為了寫乙個c s架構的軟體 s端 伺服器端 網路 網路連線介質 網路協議 osi七層 網路協議 又稱osi七層協議...
初學網路程式設計
1.c s架構 c s架構 客戶端 client 服務端 server 架構,這種架構也是從使用者層面 也可是物理層面 來劃分的.這裡客戶端一般指需先安裝再執行的應用程式.對作業系統依賴性較大 服 務端即是這類程 序對應的伺服器.b s架構 browser server,瀏覽器端與伺服器端架構.也是...
初學socket程式設計(網路程式設計)
tcp 是面向連線的,三次握手成功之後才能通訊,位元組流傳輸,效率低於udp,但是安全性高 因為採用了三次握手和四次揮手協議 雙方需要建立連線才能通訊 傳送資料 底層使用tcp協議,tcp底層是用http協議。tcp三次握手四次揮手示意圖 tcp通訊實現 先建立伺服器端 tcp協議服務端 publi...