日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python網(wǎng)絡編程socket講解

計算機網(wǎng)絡的作用是將各臺計算機連接到一起,使得計算機之間可以相互通信,網(wǎng)絡編程就是利用程序?qū)崿F(xiàn)計算機之間的通信,更確切地說,網(wǎng)絡通信是兩臺計算機上的兩個進程之間的通信。利用Python進行網(wǎng)絡編程,就是在Python程序本身的進程內(nèi),連接別的服務器進程的通信端口進行通信。

低級別的網(wǎng)絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統(tǒng)Socket接口的全部方法。 高級別的網(wǎng)絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網(wǎng)絡服務器的開發(fā)。

什么是 Socket?

Socket又稱”套接字”,應用程序通常通過”套接字”向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請求,使主機間或者一臺計算機上的進程間可以通訊。

socket()函數(shù)

Python 中,我們用 socket()函數(shù)來創(chuàng)建套接字,語法格式如下:

socket.socket([family[, type[, proto]]])

參數(shù)

family: 套接字家族可以使AF_UNIX或者AF_INET

type: 套接字類型可以根據(jù)是面向連接的還是非連接分為SOCK_STREAM或SOCK_DGRAM

protocol: 一般不填默認為0.

Socket 對象(內(nèi)建)方法

函數(shù) 描述
服務器端套接字
s.bind() 綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址。
s.listen() 開始TCP監(jiān)聽。backlog指定在拒絕連接之前,操作系統(tǒng)可以掛起的最大連接數(shù)量。該值至少為1,大部分應用程序設為5就可以了。
s.accept() 被動接受TCP客戶端連接,(阻塞式)等待連接的到來
客戶端套接字
s.connect() 主動初始化TCP服務器連接,。一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
s.connect_ex() connect()函數(shù)的擴展版本,出錯時返回出錯碼,而不是拋出異常
公共用途的套接字函數(shù)
s.recv() 接收TCP數(shù)據(jù),數(shù)據(jù)以字符串形式返回,bufsize指定要接收的最大數(shù)據(jù)量。flag提供有關消息的其他信息,通??梢院雎?。
s.send() 發(fā)送TCP數(shù)據(jù),將string中的數(shù)據(jù)發(fā)送到連接的套接字。返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù)量可能小于string的字節(jié)大小。
s.sendall() 完整發(fā)送TCP數(shù)據(jù),完整發(fā)送TCP數(shù)據(jù)。將string中的數(shù)據(jù)發(fā)送到連接的套接字,但在返回之前會嘗試發(fā)送所有數(shù)據(jù)。成功返回None,失敗則拋出異常。
s.recvfrom() 接收UDP數(shù)據(jù),與recv()類似,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址。
s.sendto() 發(fā)送UDP數(shù)據(jù),將數(shù)據(jù)發(fā)送到套接字,address是形式為(ipaddr,port)的元組,指定遠程地址。返回值是發(fā)送的字節(jié)數(shù)。
s.close() 關閉套接字
s.getpeername() 返回連接套接字的遠程地址。返回值通常是元組(ipaddr,port)。
s.getsockname() 返回套接字自己的地址。通常是一個元組(ipaddr,port)
s.setsockopt(level,optname,value) 設置給定套接字選項的值。
s.getsockopt(level,optname[.buflen]) 返回套接字選項的值。
s.settimeout(timeout) 設置套接字操作的超時期,timeout是一個浮點數(shù),單位是秒。值為None表示沒有超時期。一般,超時期應該在剛創(chuàng)建套接字時設置,因為它們可能用于連接的操作(如connect())
s.gettimeout() 返回當前超時期的值,單位是秒,如果沒有設置超時期,則返回None。
s.fileno() 返回套接字的文件描述符。
s.setblocking(flag) 如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(默認值)。非阻塞模式下,如果調(diào)用recv()沒有發(fā)現(xiàn)任何數(shù)據(jù),或send()調(diào)用無法立即發(fā)送數(shù)據(jù),那么將引起socket.error異常。
s.makefile() 創(chuàng)建一個與該套接字相關連的文件

顯示詳細信息

簡單實例

服務端

我們使用 socket 模塊的 socket 函數(shù)來創(chuàng)建一個 socket 對象。socket 對象可以通過調(diào)用其他函數(shù)來設置一個 socket 服務。

現(xiàn)在我們可以通過調(diào)用 bind(hostname, port) 函數(shù)來指定服務的 port(端口)。

接著,我們調(diào)用 socket 對象的 accept 方法。該方法等待客戶端的連接,并返回 connection 對象,表示已連接到客戶端。

完整代碼如下:

#!/usr/bin/python3
# 文件名:server.py

# 導入 socket、sys 模塊
import socket
import sys

# 創(chuàng)建 socket 對象
serversocket = socket.socket(
           socket.AF_INET, socket.SOCK_STREAM)

# 獲取本地主機名
host = socket.gethostname()

port = 9999

# 綁定端口號
serversocket.bind((host, port))

# 設置最大連接數(shù),超過后排隊
serversocket.listen(5)

while True:
   # 建立客戶端連接
   clientsocket,addr = serversocket.accept()      

   print("連接地址: %s" % str(addr))
   
   msg='歡迎訪問菜鳥教程!'+ "\r\n"
   clientsocket.send(msg.encode('utf-8'))
   clientsocket.close()

客戶端

接下來我們寫一個簡單的客戶端實例連接到以上創(chuàng)建的服務。端口號為 9999。

socket.connect(hosname, port ) 方法打開一個 TCP 連接到主機為 hostname 端口為 port 的服務商。連接后我們就可以從服務端獲取數(shù)據(jù),記住,操作完成后需要關閉連接。

完整代碼如下:

#!/usr/bin/python3
# 文件名:client.py

# 導入 socket、sys 模塊
import socket
import sys

# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 獲取本地主機名
host = socket.gethostname()

# 設置端口號
port = 9999

# 連接服務,指定主機和端口
s.connect((host, port))

# 接收小于 1024 字節(jié)的數(shù)據(jù)
msg = s.recv(1024)

s.close()

print (msg.decode('utf-8'))

現(xiàn)在我們打開兩個終端,第一個終端執(zhí)行 server.py 文件:

$ python3 server.py

第二個終端執(zhí)行 client.py 文件:

$ python3 client.py

歡迎訪問菜鳥教程! 這時我們再打開第一個終端,就會看到有以下信息輸出:

連接地址: ('192.168.0.118', 33397)

Python Internet 模塊

以下列出了 Python 網(wǎng)絡編程的一些重要模塊:

協(xié)議 功能用處 端口號 Python 模塊
HTTP 網(wǎng)頁訪問 80 httplib, urllib, xmlrpclib
NNTP 閱讀和張貼新聞文章,俗稱為”帖子” 119 nntplib
FTP 文件傳輸 20 ftplib, urllib
SMTP 發(fā)送郵件 25 smtplib
POP3 接收郵件 110 poplib
IMAP4 獲取郵件 143 imaplib
Telnet 命令行 23 telnetlib
Gopher 信息查找 70 gopherlib, urllib

分享名稱:Python網(wǎng)絡編程socket講解
文章地址:http://www.dlmjj.cn/article/ccescsp.html