socket的使用 socket.socket(網路層ip協議蔟,傳輸層協議類型,預設協議) socket的通信過程 socket的應用 ...
socket的使用
socket.socket(網路層ip協議蔟,傳輸層協議類型,預設協議)
# server.py
# 導入模塊
import socket
# 實例化伺服器,使用ipv4協議,tcp協議
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 綁定埠號 0.0.0.0監聽所有ip地址
s.bind(('0.0.0.0',12345))
# 監聽埠,設置連接數
s.listen(5)
# 阻塞掛起,等待客戶端連接
connSocket,addr = s.accept()
# 連接成功後,接收客戶端發來的數據,設置一次接收的數據大小,1kb
data = connSocket.recv(1024)
# 返回數據
connSocket.send(data)
# 斷開連接
connSocket.close()
# client.py
# 導入模塊
import socket
# 實例化客戶端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 連接伺服器
client.connect(('127.0.0.1',8080))
# 接收伺服器數據
client.recv(1024)
# 斷開連接
client.close()
socket的通信過程
socket的應用
# 模擬http客戶端發送請求
# 導入socket模塊和url解析模塊
import socket
from urlparse import urlparse
# 定義發送請求get_url函數
def get_url(url):
# 解析url
url = urlparse(url)
# 提取主機名
host = url.netloc
# 提取路徑
path = url.path
# 如果路徑沒有,訪問根路徑
if path == "":
path = "/"
# 客戶端實例化
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 建立socket連接
client.connect((host,80))
# 構造http協議
protol = "GET {} HTTP/1.1\r\nHOST:{}\r\nConnection:close\r\n\r\n".format(path,host)
# 發送請求數據
client.send(protol)
# 定義data接收伺服器的返回結果
data = ""
# 確保接收完數據
while True:
d = client.recv(1024)
# 如果有值繼續拼接
if d:
data += d
else:
break
# 將返回協議提取出來
html_data = data.split('\r\n\r\n')[1]
# 列印提取結果
print html_data
# 斷開tcp連接