1. 程式人生 > >python-tcp/ip網路程式設計認識(三)

python-tcp/ip網路程式設計認識(三)

本文作者:黎智煊,叩丁狼高階講師。原創文章,轉載請註明出處。

socket簡介

介紹

socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆檔案”,對於檔案用【開啟】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,socket即是一種特殊的檔案,一些socket函式就是對其進行的操作(讀/寫IO、開啟、關閉)

基本上,Socket 是任何一種計算機網路通訊中最基礎的內容。例如當你在瀏覽器位址列中輸入 http://www.wolfcode.cn 時,你會開啟一個套接字,然後連線到 http://www.wolfcode.cn

 並讀取響應的頁面然後然後顯示出來。而其他一些聊天客戶端如 gtalk 和 skype 也是類似。任何網路通訊都是通過 Socket 來完成的。


  1. 本地的程序間通訊(IPC)有很多種方式,例如

  • 佇列
  • 同步(互斥鎖、條件變數等)
    以上通訊方式都是在一臺機器上不同程序之間的通訊方式,那麼問題來了

網路中程序之間如何通訊?

  1. 網路中程序之間如何通訊

首要解決的問題是如何唯一標識一個程序,否則通訊無從談起!

在本地可以通過程序PID來唯一標識一個程序,但是在網路中這是行不通的。

其實TCP/IP協議族已經幫我們解決了這個問題,網路層的“ip地址”可以唯一標識網路中的主機

,而傳輸層的“協議+埠”可以唯一標識主機中的應用程式(程序)。

這樣利用ip地址,協議,埠就可以標識網路的程序了,網路中的程序通訊就可以利用這個標誌與其它程序進行互動

  1. 什麼是socket

socket(簡稱 套接字) 是程序間通訊的一種方式,它與其他程序間通訊的一個主要不同是:

它能實現不同主機間的程序間通訊,我們網路上各種各樣的服務大多都是基於 Socket 來完成通訊的

  • 例如我們每天瀏覽網頁、QQ 聊天、收發 email 等等
  1. 建立socket

在 Python 中 使用socket 模組的函式 socket 就可以完成:

socket.socket(AddressFamily, Type)

說明:
函式 socket.socket 建立一個 socket,返回該 socket 的描述符,該函式帶有兩個引數:

  • Address Family:可以選擇 AF_INET(用於 Internet 程序間通訊) 或者 AF_UNIX(用於同一臺機器程序間通訊),實際工作中常用AF_INET
  • Type:套接字型別,可以是 SOCK_STREAM(流式套接字,主要用於 TCP 協議)或者 SOCK_DGRAM(資料報套接字,主要用於 UDP 協議)
    建立一個tcp socket(tcp套接字)
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print 'Socket Created'

建立一個udp socket(udp套接字)(用例,到時候後面講到udp會詳細介紹)

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

print 'Socket Created'

socket和file的區別:

  • file模組是針對某個指定檔案進行【開啟】【讀寫】【關閉】

  • socket模組是針對 伺服器端 和 客戶端Socket 進行【開啟】【讀寫】【關閉】

具體可以參考一下以下這個圖片:

 

叩丁狼教育.png

想獲取更多技術乾貨,請前往叩丁狼官網:http://www.wolfcode.cn/all_article.html