python_socket (套接字)


socket是計算機網絡通信的基本的技術之一。如今大多數基於網絡的軟件,如瀏覽器,即時通訊工具甚至是P2P下載都是基於Socket實現的。

網絡上兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket,應用程序通過socket向網絡中發出消息,或者接收消息。

socket是應用層與TCP/IP協議族的中間抽象層,它是一組接口,把復雜的TCP/IP協議族封裝為幾個簡單的接口提供給應用層調用,實現程序在網絡中的通信

socket僅僅是一個調用接口,為了方便程序員針對TCP或者UDP編程的接口。

 

 socket的七個方法

  服務端套接字綁定IP端口:bind()

  客戶端套接字連接服務器:connect()

  服務端套接字監聽:listen()

  套接字發送消息:send()

  服務端監聽套接字同意連接:accept()

  套接字接受消息:recv()

  套接字關閉連接:close()

 

創建socket

 導入socket模塊: import socket

 創建socket對象:socket.socket()

 

 

基本使用

 

注意: 服務端是通過accept生成的對等連接套接字來和客戶端通信的

注意: aeecpt和recv是會阻塞的,當沒有數據來的時候阻塞等數據過來

 

xshell 中命令執行

 

代碼執行:

寫一個不斷接受(while True)用戶連接的服務端,它的作用是把客戶端發來的數據原封不動的返回。

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

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

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

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

print("執行到這, 上面沒問題了")

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

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

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

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

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

        #返回
        print(data)

        #判斷是否為空。
        if not data:
            break

        #輸入一個值,與客戶端通訊
        aa = input("--->>:")

        #解決報錯:TypeError: a bytes-like object is required, not 'str'
        bb = aa.encode()

        # 傳輸
        conn.send(bb)

#關閉鏈接
server.close()

寫一個客戶端來測試上面的服務端

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

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

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

#使用input循環向服務端發送請求
while True:
    
    msg = input("-->>:").strip()
    if len(msg) == 0:
        continue
    
    #發送數據 b將字符串轉為bys類型
    client.send(msg.encode("utf-8"))
    
    #接收服務器端的返回,需要聲明收多少,默認1024字節
    id = 1024
    data = client.recv(id)
    
    #打印data是recv的data
    print("recv: %s" % data)

#關閉接口
client.close()

 

 

作者:含笑半步顛√

博客鏈接:https://www.cnblogs.com/lixy-88428977

聲明:本文為博主學習感悟總結,水平有限,如果不當,歡迎指正。如果您認為還不錯,歡迎轉載。轉載與引用請注明作者及出處。


免責聲明!

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



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