Python socket實現處理多個連接


 
 socket實現處理多個連接

 

 

 

實現處理多個連接

  使用whlie循環實現多個客戶端,排隊請求服務端

 

循環監聽端口發送信息(windos,Linux)

  1.Linux 系統如果客戶端斷開連接,會循環打印

  2.Windos 系統如果客戶端斷開連接,會報錯中斷 

  3.案例:在linux系統下實現

  4.需求:可以實現單個用戶斷開,並同過排隊對服務端訪問。

 

客戶端

#客戶端Linux系統下:輸入命令通過服務端返回
import socket

#聲明協議類型,同事生成socket連接對象
client = socket.socket()

#鏈接地址和端口,元組(本地,端口)
client.connect(('localhost',6969))

#使用input循環向服務端發送請求
while True:
    msg = input(">>:").strip()
    if len(msg) == 0:continue

    #發送數據 b將字符串轉為bys類型
    client.send(msg.encode("utf-8"))

    #接收服務器端的返回,需要聲明收多少,默認1024字節
    data = client.recv(1024)

    #打印data是recv的data
    print("recv:",data)

#關閉接口
client.close()

 

服務端

#服務端Linux系統下:處理命令並返回
import socket
import os

#聲明類型,生成socket鏈接對象
server = socket.socket()

#監聽接收端口元組(本地,端口),綁定要監聽的端口
server.bind(('localhost',6969))

#1.監聽
#2.“5”最大監聽數,允許多少人在排隊
server.listen(5)

print("我要開始等待客戶端了")

#循環鎖定訪問客戶端
while True:

    #1.等待客戶端 #會返回鏈接的標記位conn,與連接的地址
    #2.客戶端同過conn,addr進行通話
    #3.conn就是客戶端連接過來而在服務器端為其生成的一個連接實例
    conn,addr = server.accept()

    #查看標記位與IP地址
    print(conn,addr)


    print("客戶端 他 進來了!")

    #循環處理客戶端請求
    while True:

        #1.接收數據,1024字節
        #2.如果發不完會存在緩沖去,下次在發送。
        #3.緩沖區每次最多發32768字節
        #4.每個系統不同,超出數值會有限制。
        data = conn.recv(102400)

        #返回
        print(data)

        #Linux系統內可以判斷是否為空。
        if not data:break

        #執行命令,賦值給變量
        res = os.popen(data).read()

        #返回一個值,返回res命令
        conn.send(res)

        #sendll就是循環send,用法發送大型文件。
        #conn.sendll(res)


#關閉鏈接
server.close()

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM