1. 程式人生 > >初學網路程式設計心得

初學網路程式設計心得

  昨天到今天幾乎都在做這個問題,利用SOCKET設計一個簡單的聊天工具。現在可以說是成功了80%了。並通過學習這方面知識還補充了一些MFC和網路方面的知識,一舉好幾得。但是眼睛有點疲勞,因為對著顯示器的時間長了嘛!

  一個最大的體會就是原來一個聊天程式並沒有我以前想象的那麼難啊,計算機這東西怪不得有人說它是知者不難,難者不知。

  首先就說一下基於UDP協議的設計方法吧(聊天程式要求具有較高的即時性,因此也多半採用UDP協議,TCP協議連線起來比較複雜,需要經過“三次握手”等一系列比較複雜的程式)。如果是設計字元介面的程式那就比較簡單了。首先就是載入套接字型檔,然後是建立套接字,這兩步對於伺服器端和客戶端來說都是一樣的。接下來就有一些不同的地方了。對於伺服器端的程式來說,必須將套接字與本地IP地址繫結。然後就等著接收資料吧。採用的函式是recvfrom函式。當然這個時候還要設定一個用於記錄傳送端地址的變數。型別可以為SOCKADDR_IN。而對於客戶端來說主要就是進行資料傳送。它不需要進行套接字的繫結。只需要將伺服器方的地址設定好,使用sendto函式,傳送資料就可以了。在這兩個程式的最後都要關閉套接字,呼叫CloseSocket()和WSACleanup()函式。

  如果是圖形介面的程式則比較複雜一點,因為還涉及到一些MFC訊息響應,傳遞,獲取控制代碼的方法。現在我都還有一些東西沒搞明白。還應採用多執行緒的程式設計技術,也就模糊了服務端與客戶端的界限了。

  其次是基於TCP協議的伺服器端設計方法,它的步驟為

  1. 建立套接字(socket)
  2. 將套接字繫結到一個本地地址和埠上(bind)。
  3. 將套接字設為監聽模式,準備接收客戶請求(listen)。
  4. 等待客戶請求到來,當請求到來後接受連線請求,返回一個新的對應於此次連線請求的套接字(accept)。
  5. 用返回的套接字和客戶端進行通訊(send/recv)。
  6. 返回,等待另一客戶請求。
  7. 關閉套接字。

  客戶端的設計同樣也是比較的簡單的基本步驟也可概括為

  1. 建立套接字(socket)
  2. 向伺服器發出連線請求(connect)
  3. 和伺服器端進行通訊(send/recv)
  4. 關閉套接字。

  以上就是基於TCP協議的socket程式設計步驟。的確不難吧。其核心原始碼也不過幾行。不管是TCP還是UDP我覺得他們的原理都是差不多的。

  從這個地方開始,我覺得我對網路監聽方面的知識產生了興趣。準備進一步學習一下那一方面的知識。要學計算機網路了,那些東西學一下應該是有用的。