日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回

發(fā)布時(shí)間:2025/3/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言


使用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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。