一、網絡知識的一些介紹
socket 是網絡連接端點。例如當你的Web瀏覽器請求www.jb51.net上的主頁時,你的Web瀏覽器創建一個socket并命令它去連接 www.jb51.net的Web服務器主機,Web服務器也對來自的請求在一個socket上進行監聽。兩端使用各自的socket來發送和 接收信息。
在使用的時候,每個socket都被綁定到一個特定的IP地址和端口。IP地址是一個由4個數組成的序列,這4個數均是范圍 0~255中的值(例如,220,176,36,76);端口數值的取值范圍是0~65535。端口數小于1024的都是為眾所周知的網絡服務所保留的 (例如Web服務使用的80端口);最大的保留數被存儲在socket模塊的IPPORT_RESERVED變量中。你也可以為你的程序使用另外的端口數 值。
不是所有的IP地址都對世界的其它地方可見。實際上,一些是專門為那些非公共的地址所保留的(比如形如192.168.y.z或10.x.y.z)。地址127.0.0.1是本機地址;它始終指向當前的計算機。程序可以使用這個地址來連接運行在同一計算機上的其它程序。
IP地址不好記,你可以花點錢為特定的IP地址注冊一個主機名或域名(比如使用www.jb51.net代替222.76.216.16)。域名服務器(DNS)處理名字到IP地址的映射。每個計算機都可以有一個主機名,即使它沒有在官方注冊。
多少信息通過一個網絡被傳送基于許多因素,其中之一就是使用的協議。許多的協議是基于簡單的、低級協議以形成一個協議棧。例如HTTP協議,它是用在Web瀏覽器與Web服務器之間通信的協議,它是基于TCP協議,而TCP協議又基于IP協議。
當 在你自己的兩個程序間傳送信息的時候,你通常選擇TCP或UDP協議。TCP協議在兩端間建立一個持續的連接,并且你所發送的信息有保證的按順序到達它們 的目的地。UDP不建立連接,它的速度快但不可靠。你發送的信息也可能到不了另一端;或它們沒有按順序到達。有時候一個信息的多個復制到達接收端,即使你 只發送了一次。
二、使用地址和主機名
socket模塊提供了幾個函數用于使用主機名和地址來工作。
gethostname()返回運行程序所在的計算機的主機名:
>>> import socket
>>> socket.gethostname()
'lenovo'
gethostbyname(name) 嘗試將給定的主機名解釋為一個IP地址。首先將檢查當前計算機是否能夠解釋。如果不能,一個解釋請求將發送給一個遠程的DNS服務器(遠程的DNS服務器 還可能將解釋請求轉發給另一個DNS服務器,直到該請求可以被處理)。gethostbyname函數返回這個IP地址或在查找失敗后引發一個異常。
>>> socket.gethostbyname('lenovo')
'192.168.1.4'
>>> socket.gethostbyname('www.jb51.net')
'222.76.216.16'
一個擴展的形式是gethostbyname_ex(name),它返回一個包含三個元素的元組,分別是給定地址的主要的主機名、同一IP地址的可選的主機名的一個列表、關于同一主機的同一接口的其它IP地址的一個列表(列表可能都是空的)。
新聞熱點
疑難解答