python---socket模組

來源:互聯網
上載者:User

標籤:

僅以此紀念學習過程!翻譯和各方面會有不到位的地方。如有錯誤,請指出。謝謝。

 

#coding:utf-8import socket"""socket()方法返回了一個socket對象。"""def create_connection(address,timeout,source_address):    """    .串連一個監聽internet地址(host,port)的TCP服務,返回socket對象。這是相比socket.connect()進階的方法。    .如果hosts是一個非數位主機名稱,會去串連所有可能的主機直到成功串連。使得編寫相容IPV4和IPV6的用戶端變得容易。    timeout會在嘗試去建立串連之前為socket執行個體設定逾時時間。如果沒有逾時時間,則將會預設設定為全域預設逾時時間。通過:getdefaulttimeout()來擷取。    """    addrinfo=socket.getaddrinfo("example.org", 80)[0][-1]    print addrinfo    conn=socket.create_connection(addrinfo)    print conn   def getaddrinfo(host,port,family,socktype,proto,flags):    """    .將host/port轉化為建立一個串連到那個服務的socket所需的一個包含必要參數的5元元祖的序列。host是一個網域名稱、一個IPv4或IPv6字串或None。    port是一個字串服務名類似:"http"、數字化的port或None。對於host/port為None,會轉化為底層C中的Null    family、sockettype、proto:是選擇性參數,用來篩選傳回值。預設情況下,它們的值為0。意味著全部結果都被選中。    flags:可以決定結果怎樣被計算和返回。flags預設值為0.例如:AI_NUMERICHOST將會不支援網域名稱,否則會報錯。    result是如以下格式的5元元組:    (family,socktype,proto,canonname,sockaddr)    family,socktype,proto都是integer。將會被轉化為socket()方法。如果AI_CANONNAME是flags之一。canonname將會表示主機canonname的字串。            否則canonname將會為empty。sockadd是一個描述socket地址的元祖。            如果是AF_INET則格式為:(address,port),如果為AF_INET6,則返回(address,port,flow info,scope id)    example:    """    print socket.getaddrinfo("example.org",80,0,0,socket.IPPROTO_TCP)    print socket.getaddrinfo("www.baidu.com", "http")  #port可以是"http"    print socket.getaddrinfo("www.baidu.com","80")            def getfqdn(name):    """    .返回一個name對應的完全合格的網域名稱。如果name被忽略,將會被解釋為本地主機。為了找到合格的網域名稱,將會檢查gethostbyaddr()返回的主機名稱,以及隨之而來的別名。            如果可用,第一個名稱將會被選中。當沒有任何一個合格的網域名稱可用時,將會把gethostname()的傳回值作為傳回值    """    print socket.getfqdn()    print socket.getfqdn("www.baidu.com")    print socket.getfqdn("example.org")    def gethostbyname(hostname):    """    .將hostname轉化為IPv4格式的字串。例如:100.50.200.5。如果hostname本身就是一個ipv4格式的字串,則原值返回。             想要查看更加完整的介面:gethostbyname_ex()。    gethostbyname()不支援IPv6。 getaddrinfo()應該被用來代替ipv4/v6雙重支援    """    print socket.gethostbyname("localhost")    print socket.gethostbyname("example.org")    print socket.gethostbyname("www.baidu.com")    print socket.gethostbyname("10.2.3.6")def gethostbyname_ex(hostname):    """    .將hostname轉化為IPV4格式。 是gethostbyname(hostname)的一個擴充介面。            返回一個三元組(hostname,aliaslist,ipaddrlist) 這裡:hostname是對應ipaddress的給定的原始主機名稱。    aliaslist【可能為空白】是相同地址可供選擇的主機名稱列表。ipaddrlist是相同主機相同介面對應的ipv4地址清單。    gethostbyname_ex()不支援ipv6地址。 getaddrinfo()應該被用來提供對ipv4和ipv6的支援    """    print socket.gethostbyname_ex("localhost")    print socket.gethostbyname_ex("example.org")    print socket.gethostbyname_ex("www.baidu.com")    print socket.gethostbyname_ex("127.0.0.1")def gethostname():    """            返回正在執行python解譯器的主機名稱的字串            如果想要知道當前的主機IP,可以使用:gethostbyname(gethostname())。            這個操作假設有一個有效IP地址和主機的映射。這個假設並不總是有效。            注意:gethostname()並不總是返回完全規格的網域名稱。應該使用getfqdn()    """    print socket.gethostname()    print socket.gethostbyname(socket.gethostname())    print socket.getfqdn()    "推薦使用socket.getfqdn()"    print socket.gethostbyname(socket.getfqdn())      def gethostbyaddr(ip_address):    """    return三元組:(hostname,aliaslist,ipaddrlist) 結果和gethostbyname_ex(hostname)一致。            想要得到完全規格的主機名稱,需使用:getfqdn()。    gethostbyaddress()對於ipv4和ipv6都支援。    """    print socket.gethostbyaddr("127.0.0.1")def getnameinfo(sockaddr,flags):    """            將sockaddr轉換為2元祖:(host,port)。由flags決定結果包含全規格的網域名稱還是數字化的指向主機的地址。            類似的,port可以包含一個字串連接埠名或數字型的連接埠號碼。    """    sockaddr=socket.getaddrinfo("127.0.0.1","90")[0][4]    print socket.getnameinfo(sockaddr,socket.AI_NUMERICHOST)    def getprotobyname(protocolname):    """    .會將網路通訊協定名稱轉化為適合傳遞的常數。就像socket()函數中的第三個可選的參數。 僅僅會被以SOCK_RAW模式開啟的socket需要。            對於普通的socket模式,如果protocol為0或被忽略時,正確的協議會被自動選擇    """    print socket.getprotobyname("icmp") #1    print socket.getprotobyname("udp") #17    print socket.getprotobyname("tcp") #16    print socket.getprotobyname("ip") #0    def getservbyname(servicename,protocolname):    """    .將網路服務名和協議名轉化為這個服務對應的連接埠號碼。可選的協議名為:tcp   udp   或其他可以匹配的任何協議    protocolname是選擇性參數    """def getservbyport(port,protocolname):    """            將網路連接埠號碼和協議名轉化為那個服務的服務名。  protocolname為類似:"tcp"  upd" 之類的可匹配的協議"    """def socket_test(family,type,proto):    """    family、type、proto是可選的           使用給定的地址family、socket類型和協議號建立一個socket.family預設是AF_INET 或AF_INET6或AF_UNIX    socket類型預設是:SOCK_STREAM。 SOCK_DGRAM  或其他SOCK_...常數之一。    proto為1或者省略。。。  1時是"ip" 協議    """    print socket.socket()    def socketpair(family,type,proto):    """            返回一對使用famil、type、proto建立的已串連的socket對象。family、type、proto和socket()參數一致            預設family為AF_INET。  如果被平台拒絕的話,family預設為AF_UNIX。            這個方法適用平台:UNIX    """    #print socket.socketpair()  #windows上沒有該方法   def fromfd(fd,family,type,proto):    """            複製檔案描述符(通過file.fileno()返回的整數),並通過結果建立一個socket對象。    """    def  ntoh1(x):    """    .將網路上的32bit的正整數轉化為主機位元組順序。當主機位元組順序和網路位元組順序一致時,沒有任何操作。否則執行一個4bit的轉換操作    """    def ntohs(x):    """    .將網路上的16bit的正整數轉化為主機位元組順序。當主機位元組順序和網路位元組順序一致時,沒有任何操作。否則執行一個2bit的轉換操作    """    def htonl(x):    ".將原生32bit的正整數轉化為網路位元組順序。當主機位元組順序和網路位元組順序一致時,沒有任何操作。否則執行一個4bit的轉換操作"def htons(x):    ".將主機上的16bit的正整數轉化為主機位元組順序。當主機位元組順序和網路位元組順序一致時,沒有任何操作。否則執行一個2bit的轉換操作"def inet_atoon(ip_string):    """        """if __name__ == "__main__":    """    create_connection(None,None,None)    getaddrinfo(None,None,None,None,None,None)    getfqdn(None)    gethostbyname(None)    gethostbyname_ex(None)    gethostname()    gethostbyaddr(None)    getnameinfo(None,None)    getprotobyname(None)    getservbyname(None,None)    socket_test(None,None,None)    """                                          

 TO_BE_CONTINUED!

python---socket模組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.