Python--Socket用法
阿新 • • 發佈:2019-02-07
Socket 是所有語言的網路程式設計中最基本最重要的知識點,為此Python也不例外,而Python也提供了較為完善和易用的語法,那麼我們就開始看看Python的Socket程式設計。
import socket
serve = socket.socket()
首先第一步我們需要匯入Python中的Socket包,並且初始化。需要注意的是:
我之所以在socket()函式中沒有填入引數,是因為在Python中它已經有了預設引數。
family(給定的套接族)一般有兩種重要引數:
socket.AF_INET | 用於伺服器與伺服器之間的網路通訊 |
socket.AF_INET6 | 基於IPV6方式的伺服器與伺服器之間的網路通訊 |
socket.SOCK_STREAM | 基於TCP的流式socket通訊 |
socket.SOCK_DGRAM | 基於UDP的資料報式socket通訊 |
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
伺服器端的基本流程:
1.初始化socket()
2.使用bind()繫結ip和埠號
3使用listen()監聽訊息
4.獲取客戶端的套接字地址accept()
5.使用recv()接收資料,send()傳送資料與客戶端進行互動
客戶端的基本流程:
1.初始化socket()
2.使用ip和埠號connect()連線伺服器
3.使用recv()接收資料,send()傳送資料與伺服器進行互動
在Python的Socket無外乎就兩個主要方法,一個是傳送資料的send()和接收資料的recv(),所以想要做好互動,
只要做好兩邊接收和傳送的操作即可,但需要注意的是,兩邊的send和recv都是需要正確的對應好,不然就會使
客戶端或者伺服器端出現掛起狀態。
簡易的伺服器和客戶端例子:
serve(伺服器):
import socket server = socket.socket() #初始化 server.bind(('localhost',6969)) #繫結ip和埠 server.listen(5) #監聽,設定最大數量是5 print("開始等待接受客戶端資料----") while True: conn,addr = server.accept() #獲取客戶端地址 print(conn,addr) print("客戶端來資料了") while True: data = conn.recv(1024) #接收資料 print("接受的資料:",data) if not data: print("client has lost") break conn.send(data.upper()) #返回資料 serve.close() #關閉socket
client(客戶端):
import socket
client = socket.socket()
client.connect(('localhost',9999)) #連線伺服器
while True:
msg = input(">>:").strip()
if len(msg) == 0 :continue
client.send(msg.encode()) #傳送資料
data = client.recv(1024) #接收資料
print("返回資料:",data.decode())
client.close()
這是一個能一直保持連線的程式,因為上面的步驟只是最基本的用法,所以想要能一直連線的程式,就需要使用
while True保持迴圈,還有一個問題就是,此程式只能連線一個客戶端,並不能支援多併發,所以當出現第二個客戶端時,就會出現掛起不動,所以想要完成多併發,則需要使用Python中的另外一個庫“socketserver”,我將會在
下一個文章裡寫出~