python socket程式設計詳細介紹

2021-07-16 15:09:26 字數 3240 閱讀 3664

python 提供了兩個基本的 socket 模組。

第乙個是 socket,它提供了標準的 bsd sockets api。

第二個是 socketserver, 它提供了伺服器中心類,可以簡化網路伺服器的開發。

下面講的是socket模組功能

套接字格式:

socket(family,type[,protocal]) 使用給定的位址族、套接字型別、協議編號(預設為0)來建立套接字。

socket型別

描述socket.af_unix

只能夠用於單一的unix系統程序間通訊

socket.af_inet

伺服器之間網路通訊

socket.af_inet6

ipv6

socket.sock_stream

流式socket , for tcp

socket.sock_dgram

資料報式socket , for udp

socket.sock_raw

原始套接字,普通的套接字無法處理icmp、igmp等網路報文,而sock_raw可以;其次,sock_raw也可以處理特殊的ipv4報文;此外,利用原始套接字,可以通過ip_hdrincl套接字選項由使用者構造ip頭。

socket.sock_seqpacket

可靠的連續資料報服務 建立

tcp socket:

s=socket.socket(socket.af_inet,socket.sock_stream) 建立

udp socket:

s=socket.socket(socket.af_inet,socket.sock_dgram)

注意點:

1)tcp傳送資料時,已建立好tcp連線,所以不需要指定位址。udp是面向無連線的,每次傳送要指定是發給誰。

2)服務端與客戶端不能直接傳送列表,元組,字典。需要字串化repr(data)。

socket函式

描述服務端socket函式

s.bind(address)

將套接字繫結到位址, 在af_inet下,以元組(host,port)的形式表示位址.

s.listen(backlog)

開始監聽tcp傳入連線。backlog指定在拒絕連線之前,作業系統可以掛起的最大連線數量。該值至少為1,大部分應用程式設為5就可以了。

s.accept()

接受tcp連線並返回(conn,address),其中conn是新的套接字物件,可以用來接收和傳送資料。address是連線客戶端的位址。

客戶端socket函式

s.connect(address)

連線到address處的套接字。一般address的格式為元組(hostname,port),如果連線出錯,返回socket.error錯誤。

s.connect_ex(adddress)

功能與connect(address)相同,但是成功返回0,失敗返回errno的值。

公共socket函式

s.recv(bufsize[,flag])

接受tcp套接字的資料。資料以字串形式返回,bufsize指定要接收的最大資料量。flag提供有關訊息的其他資訊,通常可以忽略。

s.send(string[,flag])

傳送tcp資料。將string中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於string的位元組大小。

s.sendall(string[,flag])

完整傳送tcp資料。將string中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回none,失敗則丟擲異常。

s.recvfrom(bufsize[.flag])

接受udp套接字的資料。與recv()類似,但返回值是(data,address)。其中data是包含接收資料的字串,address是傳送資料的套接字位址。

s.sendto(string[,flag],address)

傳送udp資料。將資料傳送到套接字,address是形式為(ipaddr,port)的元組,指定遠端位址。返回值是傳送的位元組數。

s.close()

關閉套接字。

s.getpeername()

返回連線套接字的遠端位址。返回值通常是元組(ipaddr,port)。

s.getsockname()

返回套接字自己的位址。通常是乙個元組(ipaddr,port)

s.setsockopt(level,optname,value)

設定給定套接字選項的值。

s.getsockopt(level,optname[.buflen])

返回套接字選項的值。

s.settimeout(timeout)

設定套接字操作的超時期,timeout是乙個浮點數,單位是秒。值為none表示沒有超時期。一般,超時期應該在剛建立套接字時設定,因為它們可能用於連線的操作(如connect())

s.gettimeout()

返回當前超時期的值,單位是秒,如果沒有設定超時期,則返回none。

s.fileno()

返回套接字的檔案描述符。

s.setblocking(flag)

如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(預設值)。非阻塞模式下,如果呼叫recv()沒有發現任何資料,或send()呼叫無法立即傳送資料,那麼將引起socket.error異常。

s.makefile()

建立乙個與該套接字相關連的檔案

tcp服務端:

1 建立套接字,繫結套接字到本地ip與埠

# socket.socket(socket.af_inet,socket.sock_stream) , s.bind()

2 開始監聽連線                   #s.listen()

3 進入迴圈,不斷接受客戶端的連線請求              #s.accept()

4 然後接收傳來的資料,並傳送給對方資料         #s.recv() , s.sendall()

5 傳輸完畢後,關閉套接字                     #s.close()

tcp客戶端:

1 建立套接字,連線遠端位址

# socket.socket(socket.af_inet,socket.sock_stream) , s.connect()

2 連線後傳送資料和接收資料          # s.sendall(), s.recv()

3 傳輸完畢後,關閉套接字          #s.close()

Python Socket 程式設計

client import socket,sys if name main 處理引數 argv sys.argv if len argv 3 or len argv 2 and argv 1 print useage argv 0 sys.exit 0 host argv 1 server ip位址...

python socket程式設計

python 編寫server的步驟 1.第一步是建立socket物件。呼叫socket建構函式。如 socket socket.socket family,type family引數代表位址家族,可為af inet或af unix。af inet家族包括internet位址,af unix家族用於...

python socket程式設計

客戶端 author lenovo fromsocketimport host localhost port 2157 bufsize 1024 addr host,port tcpclient socket af inet,sock stream tcpclient.connect addr wh...