首頁 >後端開發 >Python教學 >python中socket實現TCP通訊的介紹(附範例)

python中socket實現TCP通訊的介紹(附範例)

不言
不言轉載
2018-10-13 16:39:343923瀏覽

這篇文章帶給大家的內容是關於python中socket實現TCP通訊的介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

TCP

TCP(Transmission Control Protocol 傳輸控制協定)是一種面向連接的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。在簡化的電腦網路OSI模型中,它完成第四層傳輸層所指定的功能,用戶資料封包協定(UDP)是同一層內 [1]  另一個重要的傳輸協定。在因特網協定族(Internet protocol suite)中,TCP層是位於IP層之上,並應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。

下面是socket實作TCP通訊的示意圖,我們根據示意圖來寫程式

python中socket實現TCP通訊的介紹(附範例)

TCP服務端

伺服器程序首先要綁定一個連接埠並監聽來自其他客戶端的連線。如果某個客戶端連接過來了, 伺服器就與該客戶端建立Socket連接, 隨後的通訊就靠這個Socket連接了。

我們來寫一個簡單的伺服器程序, 它接收客戶端連接,回覆客戶端發送的請求。

import socket
server = socket.socket()
server.bind(('192.168.1.165',8900))
#调用 listen() 方法开始监听端口, 传入的参数指定等待连接的最大数量
server.listen(4)
serObj,address = server.accept()
#当有客户端访问时,实现两边的交流,如果有一方退出,整个程序退出。
#服务器程序通过一个永久循环来接受来自客户端的连接
#这里虽然给出最大连接数为4,但单线程程序也只会响应一个连接
while True:
#建立连接后,服务端等待客户端发送的数据,实现通信
    re_data = serObj.recv(1024).decode('utf-8')
    print('client>>',re_data)
    if re_data == 'quit':
        break
    send_data = input('server>>')
    serObj.send(send_data.encode('utf-8'))
    if send_data == 'quit':
        break
serObj.close()
server.close()

TCP客戶端

大多數連線都是可靠的TCP連線。建立TCP連線時, 主動發起連線的叫做客戶端, 被
動回應連線的叫伺服器。

舉個例子, 當我們在瀏覽器中存取新浪時, 我們自己的電腦就是客​​戶端, 瀏覽器會主動向新浪的伺服器發起連線。如果一切順利, 新浪的伺服器接受了我們的連接, 一個TCP連接就建立起來的, 後面的通信就是發送網頁內容了。

客戶端要主動發起TCP連接, 必須知道伺服器的IP位址和連接埠號碼。

import socket
client = socket.socket()
client.connect(('192.168.1.165',8900))
while True:
    send_data = input("client>>")
    client.send(send_data.encode('utf-8'))
    if send_data == 'quit':
        break
    re_data = client.recv(1024).decode('utf-8')
    if re_data == 'quit':
        break
    print("server>>",re_data)

client.close()

用一個視窗執行客戶端、另一個視窗執行服務端,可以更直觀看見效果。
這裡我的08_pra.py是服務端程序,09_pra.py是客戶端程序

#剛建立連接時的示意圖

python中socket實現TCP通訊的介紹(附範例)

一次通信完成的示意圖

python中socket實現TCP通訊的介紹(附範例)

以上是python中socket實現TCP通訊的介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除