#socket 服務端開發
import socket
# 創建socket 對象
socket_server = socket.socket()
# 綁定ip 地址和端口
socket_server.bind(("localhost",8888))
# 監聽端口
socket_server.listen(1)
# listen 方法內接收一個整數參數,表示接收的連接數量
#等待客戶端連接
conn,address = socket_server.accept()
# accept()方法返回的是二元元組(連接對象,客戶端地址信息)
# 可以通過 變量1,變量2 = socket_server.accept()的形式,直接接收二元元組內的兩個元素
# accept()方法,是阻塞的方法,等待客戶端的連接,如果沒有連接,就卡在這一行不向下執行了
print(f"我接收到了客戶端的連接,客戶端的信息是: {address}")
while True:
#接收客戶端信息,要使用客戶端和服務器的本次連接對象,而非socket_server 對象
data = conn.recv(1024).decode("gbk")
#recv 接收的參數是緩衝區大小,一般給1024 即可
#recv方法的返回值是一個字節數組也是 bytest 對象,不是字符串,可以通過decode 方法通過UTF-8 編碼,將字節數組轉換爲字符串對象
print(f"客戶端發來的信息是: {data}")
#發送回覆信息
msg = input("請輸入你要和客戶端回覆的消息:")
if msg == "exit":
break
conn.send(msg.encode("gbk"))
#關閉連接
conn.close()
socket_server.close()
"""
socket客戶端開發
"""
import socket
# 創建socket 對象
socket_client = socket.socket()
# 連接到服務器
socket_client.connect(("localhost",8888))
while True:
#發送消息
msg = input("請輸入要給服務段發送的信息: ")
if msg == "exit":
break
socket_client.send(msg.encode("gbk"))
#接收返回消息
recv_data = socket_client.recv(1024)
print(f"服務端回覆的消息是: {recv_data.decode('gbk')}")
# 關閉連接
socket_client.close()