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 協議》,轉載必須註明作者和本文連結