Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回
一、前言
使用Python可以很簡單地創建一個TCP服務器程序,該TCP服務器的程序目的是完成這個功能:TCP客戶端發送一段字符串給TCP服務端,TCP服務端將字符串原路返回去。
我是從該B站視頻教程學習python的socket編程:
https://www.bilibili.com/video/BV1Xx411R743?spm_id_from=333.999.0.0
二、代碼
import socketdef main():# 創建套接字tcp_Server_Sockettcp_Server_Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 綁定本地信息tcp_Server_Socket.bind(("",7890))# 套接字對象tcp_Server進入監聽狀態,等待TCP客戶端建立鏈接,最大連接數為1tcp_Server_Socket.listen(1)while True:print("等待一個新的客戶端的到來:")# 等待TCP客戶端的連接new_Client_Socket,client_addr = tcp_Server_Socket.accept()print("一個新的客戶端已經到來:%s" % str(client_addr))# 循環目的:為同一個客戶端服務多次,直到客戶端斷開連接while True:# 進入阻塞態,等待TCP客戶端發送字符串(最大1024個字節)過來recv_data = new_Client_Socket.recv(1024)# 打印信息到控制臺print("客戶端送過來的請求是: %s" % recv_data.decode("utf-8"))# 解除阻塞有兩種情況:if recv_data:# 將數據發回去之前增加一個換行recv_data += "\n".encode("utf-8") # 將收到的字符串原路返回給TCP客戶端 new_Client_Socket.sendall(recv_data)else:print(client_addr,"disconnected") # TCP客戶端斷開連接,打印信息。breaknew_Client_Socket.close()print("已經為客戶端服務完畢.")tcp_Server_Socket.close() #可選,它永遠不會被執行if __name__ == "__main__":main()
三、測試代碼
3.1、網絡調試助手mNetAssist
在ubuntu使用網絡調試助手mNetAssist可以方便地測試socket程序,它可以充當TCP服務器,TCP客戶端,UDP收發。
3.2、使用mNetAssist測試socket程序
接著,點擊“連接網絡”。TCP服務器檢測到有TCP客戶端連接過來,表示TCP服務器與TCP客戶端建立連接成功,可以發送字符串了。
最后,使用網絡調試助手(TCP客戶端)發送一串字符串“Hello,World"給TCP服務器。TCP服務器接收到”Hello,World"之后,將"Hello,World返回給TCP客戶端。
最后,TCP客戶端斷開連接。TCP服務器會繼續等待下一個TCP客戶端的連接。
此時,TCP客戶端也可以再次連接TCP服務器。
至此,使用python3開發的TCP服務器程序完成。
四、socket程序阻塞的位置
先說明一下,new_Client_Socket.recv(1024)就是阻塞的位置。TCP服務器跟TCP客戶端建立連接后,TCP服務器會馬上進入接收的狀態(阻塞),直到TCP客戶端發送消息過來(解阻塞)才開始執行后續的程序。
總結
以上是生活随笔為你收集整理的Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat 优化_浅谈Tomcat服务
- 下一篇: c++矩阵转置_lt;读书笔记4gt;