Python | Socket02 - 使用with语句建立一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回
生活随笔
收集整理的這篇文章主要介紹了
Python | Socket02 - 使用with语句建立一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
Python | Socket01 - 創建一個TCP服務器(阻塞+單線程),將TCP客戶端發過來的字符串原路返回
在上一篇博文完成TCP服務器簡單的收發程序后,發現在Python上有更加簡潔的方式來實現,使用with語法提供的上下文管理器。該程序的功能還是跟上一篇博文一樣。
二、代碼
import socketdef main():# 使用with語句創建并管理一個套接字對象tcp_Serverwith socket.socket(socket.AF_INET,socket.SOCK_STREAM) as tcp_Server:# 套接字對象tcp_Server綁定IP地址(""表示本機IP地址)與端口號7890tcp_Server.bind(("",7890)) # 套接字對象tcp_Server進入監聽狀態,等待TCP客戶端建立鏈接,最大連接數為1tcp_Server.listen(1)while True:print("等待一個新的客戶端的到來:")# 程序進入阻塞態,當套接字對象tcp_Server接收到一個鏈接請求,建立新的套接字對象new_Socket去服務該TCP客戶端new_Socket,addr = tcp_Server.accept()print("一個新的客戶端已經到來:%s" % str(addr))# 使用with語句管理套接字對象new_Socketwith new_Socket:# 打印連接過來的TCP客戶端的IP地址與端口號print(addr,"connected.")while True:# 進入阻塞態,等待TCP客戶端發送字符串(最大1024個字節)過來data = new_Socket.recv(1024)print("客戶端送過來的請求是: %s" % data.decode("utf-8"))# 解除阻塞有兩種情況:if not data:print(addr,"disconnected.") #TCP客戶端斷開連接,打印消息。print("已經為客戶端服務完畢")break# 數據發回去之前增加一個換行data += "\n".encode("utf-8")# 將收到的字符串原路返回給TCP客戶端new_Socket.sendall(data)# 使用with語句創建new_Socket套接字對象后,with退出時自動調用new_Socket.close()# 使用with語句創建tcp_Server套接字對象后,with退出時自動調用tcp_Server.close()if __name__ == "__main__":main()
三、測試代碼
先運行TCP服務器程序。
接著,使用網絡調試助手充當TCP客戶端與TCP服務器進行連接。
四、知識點補充
4.1、With語法的好處
使用with語法可以省去調用socket對象的close( )方法,with語法的最重要作用就是自動釋放資源。不需要程序員調用close()方法釋放資源了。
以下摘自《極客時間》的課程《Python 核心技術與實戰》。
總結
以上是生活随笔為你收集整理的Python | Socket02 - 使用with语句建立一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下卸载 dev sd*下硬盘,
- 下一篇: mysql 毫秒比较_MYSQL的毫秒级