socket 完成簡單的通訊

Coolest發表於2020-05-07

socket的介紹

socket又稱“套接字”,socket會通過udp/tcp協議來傳送資料,用來實現兩臺機器的簡單通訊。

注意:如果要用socket實現兩臺機器的簡單通訊,請先確保這兩臺機器連入同一個區域性網中。當然,socket也可以實現一臺機器的通訊,你只需要把連線物件ip設定為127.0.0.1,也就是本機ip。

例項

這裡只展示部分實用的函式。

函式 描述
socket.socket() 建立一個套接字
socket.bind() 繫結到一個ip和埠上,傳入引數為元組
socket.recv() 接受資料
socket.send() 傳送資料
socket.close() 關閉套接字
socket.connect() 連線到一個ip和埠上
socket.listen() 開啟tcp埠上監聽模式
socket.accept() 阻塞,等待連線

機器之間的通訊功能

socket服務端

讓我們建立一個叫做socket_server.py,然後輸入以下程式碼:

import socket
server = socket.socket()
server.bind(('0.0.0.0',80))
server.listen()
sock,addr = server.accept()
data = ""
while True:
    tmp_data = sock.recv(1024)
    if tmp_data:
        data += tmp_data.decode("utf8")
    else:
        break
print('%s傳送的內容:%s'%(addr[0],data))
sock.close()

這裡我們建立了一個套接字,繫結到了0.0.0.0:80的地址上,這個地址也可以改成我們本機的名稱。然後我們就開始監聽模式,使用者連線之後,就開始接受資料(注意:在接受資料之前要進行utf8解碼)。

socket客戶端

建立完socket_server.py之後,我們就能建立我們的客戶端了。讓我們建立一個叫做socket_client.py的檔案,然後輸入以下程式碼:

import socket
client = socket.socket()
client.connect(('127.0.0.1',80))
client.send("Hello,Server.".encode("utf8"))
client.close()

這裡我們就只講以下connect和send這兩個函式。connect函式我們傳入了個元組,當然列表也行。第一個元素需要是連線的物件ip,第二個就是埠。連線完之後,我們就是用send函式來進行傳送訊息,在傳送之前,我們需要先把內容編碼為utf8型別。

對一個網站傳送資料

我們建立一個叫socket_website.py的檔案,輸入以下程式碼:

import socket
s.connect(('www.baidu.com',443))
s.send('HELLO'.encode('utf8'))
s.close()

這裡,我們對baidu.com傳送了資料,由於百度是https協議的,所以我們用443埠。如果程式碼沒有報錯的話,就說明傳送成功了。這個時候,百度的資料庫就會多了一段叫HELLO的文字內容資料。

tip:如果不停的用socket向一個網站或機器傳送資料,資料太多就會導致目標的資料庫/機器記憶體爆滿,導致崩潰。這就實現了簡單的傳說中的ddos攻擊

本作品採用《CC 協議》,轉載必須註明作者和本文連結

coder Derek

相關文章