在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python網(wǎng)絡(luò)編程(Sockets)
Python異常處理
Python循環(huán)
Python基本運算符
Python網(wǎng)絡(luò)編程(Sockets)
Python可以開發(fā)哪些程序?
Python XML解析和處理
Python數(shù)字
Python函數(shù)
Python變量類型
Python os模塊方法
Python迭代器
Python安裝和環(huán)境配置
Python構(gòu)造函數(shù)
Python文件對象方法
Python日期和時間
Python的歷史
Python生成器
Python+MySQL數(shù)據(jù)庫操作(PyMySQL)
Python命令行參數(shù)
Python元組
Python發(fā)送郵件
Python列表
Python文件讀寫
Python教程
Python面向?qū)ο螅惡蛯ο螅?/span>
Python多線程編程
Python多重繼承
Python決策
Python是什么?
Python快速入門
Python繼承
Python字典
Python字符串
Python操作符重載
Python正則表達(dá)式
Python閉包
Python修飾器
Python功能特點
Python模塊

Python網(wǎng)絡(luò)編程(Sockets)

Python提供了兩個級別的訪問網(wǎng)絡(luò)服務(wù)。 在低級別,可以訪問底層操作系統(tǒng)中的基本套接字支持,這允許您實現(xiàn)面向連接和無連接協(xié)議的客戶端和服務(wù)器。

Python還具有提供對特定應(yīng)用級網(wǎng)絡(luò)協(xié)議(如FTP,HTTP等)的更高級別訪問的庫。

本章將了解和學(xué)習(xí)網(wǎng)絡(luò)中最著名的概念 - 套接字編程。

1.什么是套接字?

套接字(Sockets)是雙向通信信道的端點。 套接字可以在一個進(jìn)程內(nèi),在同一機(jī)器上的進(jìn)程之間,或者在不同主機(jī)的進(jìn)程之間進(jìn)行通信,主機(jī)可以是任何一臺有連接互聯(lián)網(wǎng)的機(jī)器。

套接字可以通過多種不同的通道類型實現(xiàn):Unix域套接字,TCP,UDP等。 套接字庫提供了處理公共傳輸?shù)奶囟悾约耙粋€用于處理其余部分的通用接口。

套接字有自己的術(shù)語 -

  • domain - 用作傳輸機(jī)制的協(xié)議族。這些值是常量,例如:AF_INET,PF_INETPF_UNIX,PF_X25等。

  • type - 兩個端點之間的通信類型,通常用于面向連接的協(xié)議的SOCK_STREAM和用于無連接協(xié)議的SOCK_DGRAM

  • protocol - 通常為0,這可以用于標(biāo)識域和類型中的協(xié)議的變體。
  • hostname - 網(wǎng)絡(luò)接口的標(biāo)識符 -
    • 一個字符串,可以是一個主機(jī)名,一個有四個點符號的IP地址,或一個冒號中的IPV6地址(可能是點)符號。
    • 一個字符串“<broadcast>”,它指定一個INADDR_BROADCAST地址。
    • 零長度字符串,指定INADDR_ANY,或
    • 整數(shù),以主機(jī)字節(jié)順序解釋為二進(jìn)制地址。
  • port - 每個服務(wù)器監(jiān)聽一個或多個端口的客戶端的調(diào)用。端口可能是Fixnum端口號,包含端口號的字符串或服務(wù)名稱。

2. socket模塊

要創(chuàng)建套接字,必須使用套接字模塊中的socket.socket()函數(shù),該函數(shù)具有一般語法 -

s = socket.socket (socket_family, socket_type, protocol = 0)

這里是上述參數(shù)的描述 -

  • socket_family - 它的值可以是:AF_UNIXAF_INET,如前所述。
  • socket_type - 它的值可以是:SOCK_STREAMSOCK_DGRAM
  • protocol - 這通常被省略,默認(rèn)為0

當(dāng)創(chuàng)建了套接字對象這后,就可以使用所需的函數(shù)來創(chuàng)建客戶端或服務(wù)器程序。 以下是所需函數(shù)的列表:

服務(wù)器套接字方法

編號 方法 描述
1 s.bind() 此方法將地址(主機(jī)名,端口號對)綁定到套接字。
2 s.listen() 此方法設(shè)置并啟動TCP偵聽器。
3 s.accept() 這被動地接受TCP客戶端連接,等待直到連接到達(dá)(阻塞)。

客戶端套接字方法

編號 方法 描述
1 s.connect() 此方法主動啟動TCP服務(wù)器連接。

通用套接字方法

編號 方法 描述
1 s.recv() 此方法接收TCP消息。
2 s.send() 該方法發(fā)送TCP消息
3 s.recvfrom() 此方法接收UDP消息
4 s.sendto() 此方法發(fā)送UDP消息
5 s.close() 此方法關(guān)閉套接字
6 socket.gethostname() 返回主機(jī)名

3.一個簡單的服務(wù)器

要編寫互聯(lián)網(wǎng)服務(wù)器,可使用socket模塊中可用的socket()來創(chuàng)建套接字對象。 然后使用套接字對象調(diào)用其他函數(shù)來設(shè)置套接字服務(wù)器。

現(xiàn)在調(diào)用bind(hostname,port)函數(shù)來指定主機(jī)上服務(wù)的端口。

接下來,調(diào)用返回對象的accept()方法。 此方法在您指定的端口等待客戶端連接,連接成功后返回一個連接(connection)對象,該對象表示與該客戶端的連接。

#!/usr/bin/python3           # This is server.py file
import socket

# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()                           

port = 8088

# bind to the port
serversocket.bind((host, port))                                  
print("Server start at port: 8088")
# queue up to 5 requests
serversocket.listen(5)                                           

while True:
    # establish a connection
    clientsocket,addr = serversocket.accept()      

    print("Got a connection from %s" % str(addr))

    msg='Thank you for connecting'+ "\r\n"
    clientsocket.send(msg.encode('ascii'))
    clientsocket.close()

4.一個簡單的客戶端

下面接著編寫一個非常簡單的客戶端程序,打開與給定端口8088與上面的服務(wù)器程序主機(jī)的連接。 使用Python的socket模塊功能創(chuàng)建套接字客戶端非常簡單。

socket.connect(hosname,port)函數(shù)打開hostname上的port的TCP連接。當(dāng)打開了一個套接字,就可以像任何IO對象一樣讀取它。 完成后,請記住關(guān)閉它,就像關(guān)閉文件一樣。

示例

以下代碼是連接到給定主機(jī)和端口的非常簡單的客戶端,從套接字讀取任何可用數(shù)據(jù),然后退出 -

#!/usr/bin/python3           # This is client.py file

import socket

# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()

port = 8088

# connection to hostname on the port.
s.connect((host, port))

# Receive no more than 1024 bytes
msg = s.recv(1024)

s.close()

print (msg.decode('ascii'))

現(xiàn)在在后臺運行先運行:server.py,然后運行上面的client.py來查看結(jié)果,如果程序沒有錯誤,那么應(yīng)該得到類似以下以結(jié)果 -

5. Python互聯(lián)網(wǎng)模塊

Python網(wǎng)絡(luò)/互聯(lián)網(wǎng)編程中的一些重要模塊的列表如下:

協(xié)議 通用功能 端口號 對應(yīng)Python模塊
HTTP 網(wǎng)頁服務(wù) 80 httplib, urllib, xmlrpclib
NNTP Usenet新聞 119 nntplib
FTP 文件傳輸 20 ftplib, urllib
SMTP 發(fā)送郵件 25 smtplib
POP3 獲取電子郵件 110 poplib
IMAP4 獲取電子郵件 143 imaplib
Telnet 命令行 23 telnetlib
Gopher 文檔傳輸 70 gopherlib, urllib

請檢查上述所有庫,以使用FTP,SMTP,POP和IMAP協(xié)議。

進(jìn)一步閱讀

這是Socket編程的一個快速開始。 這是一個廣闊的話題。 建議通過以下鏈接查找更多詳細(xì)信息 -