python實(shí)現(xiàn)TCPserver的使用示例
python實(shí)現(xiàn)TCPserver是一件簡(jiǎn)單的事情,只要通過(guò)socket這個(gè)模塊就可以實(shí)現(xiàn)。
相關(guān)文章見(jiàn):
python實(shí)現(xiàn)TCPclient-CSDN博客
一、關(guān)于TCP協(xié)議
1、概念
TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。TCP協(xié)議主要用于在網(wǎng)絡(luò)上建立穩(wěn)定的連接,確保數(shù)據(jù)的可靠傳輸。TCP是一種面向連接的協(xié)議,這意味著在通信的兩端(客戶端和服務(wù)器端)之間建立一個(gè)連接,然后再進(jìn)行數(shù)據(jù)傳輸。
TCP協(xié)議的特點(diǎn)包括:
(1)可靠性: TCP通過(guò)序列號(hào)、確認(rèn)應(yīng)答、超時(shí)重傳等機(jī)制保證數(shù)據(jù)的可靠性。如果發(fā)送方發(fā)現(xiàn)數(shù)據(jù)包丟失或者損壞,它會(huì)重新發(fā)送數(shù)據(jù),直到接收方正確地收到數(shù)據(jù)。
(2)面向連接: 在數(shù)據(jù)傳輸之前,通信的兩端必須先建立連接。這種連接是可靠的、全雙工的,也就是說(shuō),連接的兩端都可以同時(shí)發(fā)送和接收數(shù)據(jù)。
(3)字節(jié)流: TCP傳輸?shù)氖亲止?jié)流,沒(méi)有消息邊界。這意味著發(fā)送方可以將數(shù)據(jù)分割成任意大小的塊發(fā)送,而接收方會(huì)根據(jù)字節(jié)流進(jìn)行重組,還原出原始的數(shù)據(jù)。
(4)流量控制和擁塞控制: TCP具有流量控制和擁塞控制的機(jī)制,以避免網(wǎng)絡(luò)擁塞,確保數(shù)據(jù)的順利傳輸。
TCP協(xié)議常用于可靠性要求較高的應(yīng)用,例如文件傳輸、網(wǎng)頁(yè)瀏覽、電子郵件等。在TCP連接的兩端,通常有一個(gè)服務(wù)器端負(fù)責(zé)接收客戶端的請(qǐng)求和提供服務(wù),而客戶端則發(fā)起連接請(qǐng)求并向服務(wù)器端發(fā)送數(shù)據(jù)。
TCP服務(wù)器端通常使用socket
模塊在Python中實(shí)現(xiàn),通過(guò)創(chuàng)建一個(gè)socket
對(duì)象,綁定到指定的IP地址和端口號(hào),然后監(jiān)聽客戶端的連接請(qǐng)求。當(dāng)有客戶端請(qǐng)求連接時(shí),服務(wù)器端接受連接,建立TCP連接,并開始進(jìn)行數(shù)據(jù)的傳輸。
2、TCPclient、TCPserver與TCP是什么關(guān)系
TCP客戶端(TCP client)和TCP服務(wù)器(TCP server)則是在TCP協(xié)議上運(yùn)行的應(yīng)用程序。它們是使用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通信的兩端。
(1)TCP客戶端(TCP client): TCP客戶端是指發(fā)起連接請(qǐng)求的一方。它向指定的IP地址和端口號(hào)發(fā)起連接請(qǐng)求,連接成功后可以向服務(wù)器發(fā)送數(shù)據(jù),并接收服務(wù)器的響應(yīng)數(shù)據(jù)。
(2)TCP服務(wù)器(TCP server): TCP服務(wù)器是指等待接受連接請(qǐng)求的一方。它在指定的IP地址和端口號(hào)上監(jiān)聽客戶端的連接請(qǐng)求,當(dāng)有客戶端發(fā)起連接請(qǐng)求時(shí),服務(wù)器接受連接,并與客戶端建立TCP連接,進(jìn)行數(shù)據(jù)的交換。
所以,TCP客戶端和TCP服務(wù)器是基于TCP協(xié)議實(shí)現(xiàn)的網(wǎng)絡(luò)應(yīng)用程序。它們之間的關(guān)系是,TCP客戶端發(fā)送連接請(qǐng)求,TCP服務(wù)器接受連接請(qǐng)求,建立連接后雙方可以進(jìn)行數(shù)據(jù)傳輸。這種通信模式構(gòu)成了TCP協(xié)議的應(yīng)用場(chǎng)景。
二、一個(gè)Demo
1、使用python實(shí)現(xiàn)一個(gè)非阻塞的TCPserver
import socket import select # 創(chuàng)建非阻塞的TCP服務(wù)器 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setblocking(0) # 設(shè)置為非阻塞模式 server_socket.bind(('localhost', 12345)) # 綁定本地IP server_socket.listen(5) # 最大連接數(shù) inputs = [server_socket] # 用于select的輸入列表 outputs = [] # 用于select的輸出列表 while True: readable, writable, exceptional = select.select(inputs, outputs, inputs) for sock in readable: if sock is server_socket: # 有新連接請(qǐng)求 client_socket, client_address = server_socket.accept() client_socket.setblocking(0) inputs.append(client_socket) else: # 有數(shù)據(jù)可讀 data = sock.recv(1024) if data: # 處理收到的數(shù)據(jù) print("Received data:", data.decode('utf-8')) else: # 客戶端斷開連接 inputs.remove(sock) sock.close() for sock in writable: # 可以向客戶端發(fā)送數(shù)據(jù) pass # 在這里編寫發(fā)送數(shù)據(jù)的邏輯 for sock in exceptional: # 發(fā)生異常的處理 inputs.remove(sock) sock.close()
到此這篇關(guān)于python實(shí)現(xiàn)TCPserver的使用示例的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)TCPserver內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python通過(guò)cmd創(chuàng)建虛擬環(huán)境的實(shí)現(xiàn)(pip方式)
Python的虛擬環(huán)境是正常的現(xiàn)實(shí)環(huán)境相對(duì)應(yīng)的,在虛擬環(huán)境中安裝的包是與現(xiàn)實(shí)環(huán)境隔離的,本文主要介紹了python通過(guò)cmd創(chuàng)建虛擬環(huán)境的實(shí)現(xiàn),感興趣的可以了解一下2023-11-11解決nohup執(zhí)行python程序log文件寫入不及時(shí)的問(wèn)題
今天小編就為大家分享一篇解決nohup執(zhí)行python程序log文件寫入不及時(shí)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python批量查找包含多個(gè)關(guān)鍵詞的PDF文件
在信息爆炸的時(shí)代,數(shù)據(jù)管理變得愈發(fā)重要,本文主要為大家介紹了如何通過(guò)Python批量查找包含多個(gè)關(guān)鍵詞的PDF文件,希望對(duì)大家有所幫助2024-11-11Python爬蟲定時(shí)計(jì)劃任務(wù)的幾種常見(jiàn)方法(推薦)
這篇文章主要介紹了Python爬蟲定時(shí)計(jì)劃任務(wù)的幾種常見(jiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Python機(jī)器學(xué)習(xí)入門(一)序章
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)入門知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08python學(xué)習(xí)之hook鉤子的原理和使用
這篇文章主要為大家詳細(xì)介紹了python學(xué)習(xí)之hook鉤子的原理和使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Python3視頻轉(zhuǎn)字符動(dòng)畫的實(shí)例代碼
這篇文章主要介紹了Python3視頻轉(zhuǎn)字符動(dòng)畫的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08