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