python實現(xiàn)TCPserver的使用示例
python實現(xiàn)TCPserver是一件簡單的事情,只要通過socket這個模塊就可以實現(xiàn)。
相關文章見:
python實現(xiàn)TCPclient-CSDN博客
一、關于TCP協(xié)議
1、概念
TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。TCP協(xié)議主要用于在網絡上建立穩(wěn)定的連接,確保數(shù)據(jù)的可靠傳輸。TCP是一種面向連接的協(xié)議,這意味著在通信的兩端(客戶端和服務器端)之間建立一個連接,然后再進行數(shù)據(jù)傳輸。
TCP協(xié)議的特點包括:
(1)可靠性: TCP通過序列號、確認應答、超時重傳等機制保證數(shù)據(jù)的可靠性。如果發(fā)送方發(fā)現(xiàn)數(shù)據(jù)包丟失或者損壞,它會重新發(fā)送數(shù)據(jù),直到接收方正確地收到數(shù)據(jù)。
(2)面向連接: 在數(shù)據(jù)傳輸之前,通信的兩端必須先建立連接。這種連接是可靠的、全雙工的,也就是說,連接的兩端都可以同時發(fā)送和接收數(shù)據(jù)。
(3)字節(jié)流: TCP傳輸?shù)氖亲止?jié)流,沒有消息邊界。這意味著發(fā)送方可以將數(shù)據(jù)分割成任意大小的塊發(fā)送,而接收方會根據(jù)字節(jié)流進行重組,還原出原始的數(shù)據(jù)。
(4)流量控制和擁塞控制: TCP具有流量控制和擁塞控制的機制,以避免網絡擁塞,確保數(shù)據(jù)的順利傳輸。
TCP協(xié)議常用于可靠性要求較高的應用,例如文件傳輸、網頁瀏覽、電子郵件等。在TCP連接的兩端,通常有一個服務器端負責接收客戶端的請求和提供服務,而客戶端則發(fā)起連接請求并向服務器端發(fā)送數(shù)據(jù)。
TCP服務器端通常使用socket
模塊在Python中實現(xiàn),通過創(chuàng)建一個socket
對象,綁定到指定的IP地址和端口號,然后監(jiān)聽客戶端的連接請求。當有客戶端請求連接時,服務器端接受連接,建立TCP連接,并開始進行數(shù)據(jù)的傳輸。
2、TCPclient、TCPserver與TCP是什么關系
TCP客戶端(TCP client)和TCP服務器(TCP server)則是在TCP協(xié)議上運行的應用程序。它們是使用TCP協(xié)議進行網絡通信的兩端。
(1)TCP客戶端(TCP client): TCP客戶端是指發(fā)起連接請求的一方。它向指定的IP地址和端口號發(fā)起連接請求,連接成功后可以向服務器發(fā)送數(shù)據(jù),并接收服務器的響應數(shù)據(jù)。
(2)TCP服務器(TCP server): TCP服務器是指等待接受連接請求的一方。它在指定的IP地址和端口號上監(jiān)聽客戶端的連接請求,當有客戶端發(fā)起連接請求時,服務器接受連接,并與客戶端建立TCP連接,進行數(shù)據(jù)的交換。
所以,TCP客戶端和TCP服務器是基于TCP協(xié)議實現(xiàn)的網絡應用程序。它們之間的關系是,TCP客戶端發(fā)送連接請求,TCP服務器接受連接請求,建立連接后雙方可以進行數(shù)據(jù)傳輸。這種通信模式構成了TCP協(xié)議的應用場景。
二、一個Demo
1、使用python實現(xiàn)一個非阻塞的TCPserver
import socket import select # 創(chuàng)建非阻塞的TCP服務器 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setblocking(0) # 設置為非阻塞模式 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: # 有新連接請求 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()
到此這篇關于python實現(xiàn)TCPserver的使用示例的文章就介紹到這了,更多相關python實現(xiàn)TCPserver內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python通過cmd創(chuàng)建虛擬環(huán)境的實現(xiàn)(pip方式)
Python的虛擬環(huán)境是正常的現(xiàn)實環(huán)境相對應的,在虛擬環(huán)境中安裝的包是與現(xiàn)實環(huán)境隔離的,本文主要介紹了python通過cmd創(chuàng)建虛擬環(huán)境的實現(xiàn),感興趣的可以了解一下2023-11-11解決nohup執(zhí)行python程序log文件寫入不及時的問題
今天小編就為大家分享一篇解決nohup執(zhí)行python程序log文件寫入不及時的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01