App下載

python 程序間如何進(jìn)行通信?詳解python socket編程

猿友 2021-06-24 10:54:00 瀏覽數(shù) (5744)
反饋

在學(xué)習(xí)python的過(guò)程中,網(wǎng)絡(luò)編程是必不可少的一課。而網(wǎng)絡(luò)編程中,最基礎(chǔ)的課程就是socket編程。socket編程是一種高效的程序間傳輸數(shù)據(jù)的方式,很多語(yǔ)言都有提供socket的支持。python也提供了這樣的技術(shù)支持。接下來(lái)的文章,小編將用一個(gè)socket的實(shí)際項(xiàng)目,來(lái)讓各位小伙伴了解什么是socket網(wǎng)絡(luò)編程。

什么是socket?

socket,中文翻譯為套接字。它是一種對(duì)網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用進(jìn)程(或者相同主機(jī)的不同應(yīng)用進(jìn)程)之間進(jìn)行雙向通信的端點(diǎn)的抽象。實(shí)際上就是兩個(gè)網(wǎng)絡(luò)各種通信連接中的端點(diǎn)。它的作用就是完成應(yīng)用間的數(shù)據(jù)傳輸。

套接字技術(shù)簡(jiǎn)單的來(lái)講就是通過(guò)socket,將兩個(gè)應(yīng)用進(jìn)行連接,連接之后就能進(jìn)行數(shù)據(jù)傳輸了。socket只是實(shí)現(xiàn)連接的方法。 小編認(rèn)為套接字這個(gè)翻譯并不能直接反映出這門技術(shù)的特點(diǎn)(過(guò)于生澀),socket可以被翻譯為插座,而實(shí)際上套接字技術(shù)更像是軟件上的“插座”和“插頭”。漢語(yǔ)中的套接,是一種水管對(duì)接的技術(shù),使用一個(gè)套接管將兩端的水管連接起來(lái),這種技術(shù)就叫套接,所以是不是能理解什么是套接字了呢?

更多關(guān)于socket協(xié)議的介紹,可以前往websocket協(xié)議進(jìn)行查看。

怎么使用socket?

不同語(yǔ)言實(shí)現(xiàn)套接字的方式不同,python有專門實(shí)現(xiàn)套接字的包。只需要??import?? 相應(yīng)的包,就可以進(jìn)行套接字編程。

創(chuàng)建socket連接后可以通過(guò)??recv()??和??send()??的方法來(lái)獲取和發(fā)送socket之間傳輸?shù)臄?shù)據(jù)。

接下來(lái)就用一個(gè)實(shí)例代碼來(lái)介紹一下怎么使用socket吧!

python項(xiàng)目實(shí)戰(zhàn)

server.py

# 導(dǎo)入 socket模塊
import socket


# 創(chuàng)建 socket 對(duì)象
serversocket = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM)
# 獲取本地主機(jī)名
host = socket.gethostname()
port = 9999
# 綁定端口
serversocket.bind((host, port))
# 設(shè)置最大連接數(shù),超過(guò)后排隊(duì)
serversocket.listen(5)
while True:
    # 建立客戶端連接
    clientsocket, addr = serversocket.accept()
    print("連接地址: %s" % str(addr))
    msg = '歡迎訪問(wèn)W3Cschool教程!' + "\r\n"
    clientsocket.send(msg.encode('utf-8'))
    clientsocket.close()

client.py

# 導(dǎo)入 socket 模塊
import socket

# 創(chuàng)建 socket 對(duì)象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 獲取本地主機(jī)名
host = socket.gethostname()
# 設(shè)置端口號(hào)
port = 9999
# 連接服務(wù),指定主機(jī)和端口
s.connect((host, port))
# 接收小于 1024 字節(jié)的數(shù)據(jù)
msg = s.recv(1024)
s.close()
print(msg.decode('utf-8'))

如果理解不了socket代碼,也可以前往python網(wǎng)絡(luò)編程進(jìn)行學(xué)習(xí)。

小結(jié)

以上就是python實(shí)現(xiàn)socket通信的方法。掌握socket通信對(duì)于python的多端開(kāi)發(fā)(比如服務(wù)器客戶端,或者兩個(gè)點(diǎn)對(duì)點(diǎn)應(yīng)用)是十分重要的,各位小伙伴一定要好好學(xué)習(xí)啊。


0 人點(diǎn)贊