iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

讓Python與資安共舞系列 第 10

Socket服務端與用戶端之間的連接

  • 分享至 

  • xImage
  •  

在昨天的最後,我照著書上試寫了簡單的socket服務端與用戶端,但礙於書上使用的是Python2,而我下載的版本是3.11,所以有滿多指令是被刪掉的,所以我在網上找了Python 3的Socket服務端與用戶端撰寫文章,深入了解後發現雖然撰寫並不難,但還是有很多小細節需要注意的。所以今天這篇我要來詳細了解如何撰寫Socket服務端與用戶端。

  • server.py(服務端)
import socket

HOST = '0.0.0.0'
PORT = 9999

#先創建一個TCP socket
s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#把Socket綁定到IP遞址和端口
s1.bind((HOST, PORT))

#開始監聽連接
s1.listen(5)
print(f"Server listening on {HOST}:{PORT}")

while True:
    #接受來自用戶端的連接
    conn, addr = s1.accept()
    print(f"Connected by {addr}")

    while True:

       #接收來自用戶端的數據
        data = conn.recv(1024)
        if not data:
            break
        print(f"Received: {data.decode('utf-8')}")
        
        #將數據傳回用戶端
        conn.send(data)

    conn.close()
  • client.py(用戶端)
import socket

HOST = '127.0.0.1'
PORT = 9999

c1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

c1.connect((HOST, PORT))

while True:
    msg = input("Please input msg (or 'exit' to quit): ")
    if msg.lower() == 'exit':
        break	#如果用戶輸入"exit",則退出循環。

    #將消息發送到服務端
    c1.send(msg.encode('utf-8'))

    #接收來自服務端的回傳消息。
    data = c1.recv(1024)
    print(f"Server sent: {data.decode('utf-8')}")

c1.close()

昨天的程式碼是書上的範例,今天的範例之所以會變比較長是因為Python版本的差別,例如raw_input這個函數在Python 3中整合成input(),書上是用比較舊的方式撰寫,然而資訊更新的很快,所以我希望用比較符合Python 3的程式碼來撰寫。接下來的主題我會從書上找,但撰寫程式碼的部分我會斟酌參考其他較新的文章。

參考資料:
https://docs.python.org/zh-tw/3/howto/sockets.html
https://ftn8205.medium.com/python-%E8%AA%B2%E7%A8%8B%E7%AD%86%E8%A8%98-10-%E7%B6%B2%E8%B7%AF%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88-f18c2b2a0865


上一篇
Socket模組
下一篇
網路安全滲透測試-情報收集
系列文
讓Python與資安共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言