python-socket-簡易版實時通信

一、socket服務(wù)端代碼

"""
演示Socket服務(wù)端開發(fā)
"""
import socket
# 創(chuàng)建Socket對象
socket_server = socket.socket()

# 綁定ip地址和端口
socket_server.bind(("localhost",8888))

# 監(jiān)聽端口
socket_server.listen(1)
# listen方法內(nèi)接受一個整數(shù)傳參數(shù),表示接受的連接數(shù)量

# 等待客戶端連接
conn, address = socket_server.accept()
"""
此行代碼分開寫:
result:tuple = socket_server.accept()
conn = result[0] # 客戶端和服務(wù)端的連接對象
address = result[1] # 客戶端的地址信息
"""
# accept方法返回的是二元元組(連接對象,客戶端地址信息)
# 可以通過 變量1,變量2 = socket_server.accept()的形式,直接接受二元元組內(nèi)的兩個元素
# accept()方法,是阻塞的方法,等待客戶端的連接,如果沒有連接,就卡在這一行不向下執(zhí)行了

print(f"接收到了客戶端的連接,客戶端的信息是:{address}")

while True:
    # 接收客戶端信息,要使用客戶端和服務(wù)端的本次連接對象,而非socket_server對象
    data: str = conn.recv(1024).decode("UTF-8")
    # recv接受的參數(shù)是緩沖區(qū)大小,一般給1024即可
    # recv方法的返回值是一個字節(jié)數(shù)組也就是bytes對象,不是字符串,可以通過decode方法使用UTF-8編碼,將字節(jié)數(shù)組轉(zhuǎn)換為字符串對象
    # decode解碼
    
    print(f"接收到客戶端的信息:{data}")


    # 發(fā)送回復(fù)消息
    msg = input("請輸入你要回復(fù)的消息:")
    if msg == 'exit':
        break
    # send發(fā)送的需要是bytes對象,使用encode方法使用UTF-8編碼,將字符串對象轉(zhuǎn)換為字節(jié)數(shù)組
    # encode編碼
    conn.send(msg.encode("UTF-8"))

# 關(guān)閉連接
conn.close()
socket_server.close()

二、socket客戶端代碼

"""
演示socket客戶端開發(fā)
"""
import socket

# 創(chuàng)建socket對象
socket_client = socket.socket()


# 連接到服務(wù)端
socket_client.connect(("localhost",8888))

while True:
    # 發(fā)送消息
    msg = input("請輸入客戶端要發(fā)送的消息:")
    if msg == 'exit':
        break
    # encode編碼
    socket_client.send(msg.encode("UTF-8"))

    # 接收返回消息
    data:str = socket_client.recv(1024)  # 1024是緩沖區(qū)的大小,一般1024即可,同樣recv方法是阻塞的

    # decode解碼
    print(f"接收服務(wù)端發(fā)來的消息是:{data.decode('UTF-8')}")

# 關(guān)閉連接
socket_client.close()

三、socket通信截圖

socket服務(wù)端和客戶端通信的完整過程.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容