計算機網絡是把各個計算機連接到一起,讓網絡中的計算機可以相互通信;而網絡編程就是如何在程序中實現兩台計算機之間的通信。例如:當你用瀏覽器訪問博客園時,你的計算機就和博客園上的某台服務器連接起來了;然后,博客園的某台服務器將網頁上的內容作為數據通過互聯網傳輸到你的電腦上。然而,由於你的電腦上可能不僅只有瀏覽器,還有QQ、迅雷、網易郵件客戶端等,不同的程序連接的計算機也會不同,所以,更准確的說,網絡通信是兩台計算機上的倆個進程之間的通信。比如瀏覽器進程是和博客園服務器上的某個Web服務進程在通信,而QQ進程和騰訊的某個服務器上的某個進程在通信。
網絡編程對所有的開發語言都一樣,Python也不例外。用Python進行網絡編程,就是在Python程序本身這個進程內,連接別的服務器進程的通信端口進行通信。下面我們用socket模塊來進行實例講解。
Socket又稱“套接字”,應用程序通常通過“套接字”向網絡發出請求或者應答網絡請求,使主機間或者一台計算機上的進程間進行通訊。在Python中,我們使用socket模塊的socket函數創建一個socket對象,通過調用bind(hostname, port)函數來指定服務的port(端口);接着,我們調用socket對象的accept方法;該方法等待客戶端的連接,並返回connection對象,表示已連接到客戶端。
服務端源程序代碼如下所示:
1 #!/usr/bin/python 2 # coding: UTF-8 3 4 import socket # 導入 socket 模塊 5 6 s = socket.socket() # 創建 socket 對象 7 host = socket.gethostname() # 獲取本地主機名 8 port = 12345 # 設置端口 9 s.bind((host, port)) # 綁定端口 10 11 s.listen(5) # 等待客戶端連接 12 while True: 13 c, addr = s.accept() # 建立客戶端連接。 14 print '連接地址:', addr 15 c.send('Welcome to visit the blog of elijah7i !') 16 c.close() # 關閉連接
接下來我們寫一個簡單的客戶端實例連接到以上創建的服務,端口號為:12345;socket.connection(hostname, port)方法打開一個TCP連接到主機為hostname端口為port的服務商,記住,操作完成后需要關閉連接。
客戶端源程序代碼如下所示:
1 #!/usr/bin/python 2 # coding: UTF-8 3 4 import socket # 導入 socket 模塊 5 6 s = socket.socket() # 創建 socket 對象 7 host = socket.gethostname() # 獲取本地主機名 8 port = 12345 # 設置端口好 9 10 s.connect((host, port)) 11 print s.recv(1024) 12 s.close()
現在我們用編譯器執行第一個服務端源程序文件,可知:並沒有什么結果顯示。
接着我們用編譯器執行第二個客戶端源程序文件,顯示結果如下所示:
Welcome to visit the blog of elijah7i !
我們再回頭看第一個服務端源程序文件的結果,顯示結果如下所示:
連接地址: ('192.168.1.147', 53525)