django學習:1、socket原理

socket介紹

在計算機通信領域,socket 被翻譯爲“套接字”,它是計算機之間進行通信的一種約定或一種方式。通過 socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。

socket 的典型應用就是 Web 服務器和瀏覽器:瀏覽器獲取用戶輸入的URL,向服務器發起請求,服務器分析接收到的URL,將對應的網頁內容返回給瀏覽器,瀏覽器再經過解析和渲染,就將文字、圖片、視頻等元素呈現給用戶。

使用socket開啓服務端,通過網頁查看,並使服務端向網頁返回消息
import socket
server_sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9999))
server_sk.listen(128)
#bind()函數把一個地址族中的特定地址賦給socket。例如對應AF_INET、AF_INET6就是把一個ipv4或ipv6地址和端口號組合賦給socket。
while True:
    #等待鏈接
    client_sk,addrs = server_sk.accept()
    content = client_sk.recv(1024).decode('utf-8')
    #連接後向用戶發送消息
    msg1 = 'HTTP/1.1 200 OK\r\n'.encode('utf-8')#設置響應首行
    msg2 = 'Content-Type:text/html;charset=utf-8\r\n'.encode('utf-8')#設置響應頭
    #告知瀏覽器,返回類型爲文本類型的html,並且以utf-8編碼進行解碼
    msg3 = '\r\n'.encode('utf-8')#響應空行
    msg4 = '你好'.encode('utf-8')#設置響應體

    client_sk.send(msg1)
    client_sk.send(msg2)
    client_sk.send(msg3)
    client_sk.send(msg4)

    client_sk.close()
根據請求頭的不同,返回不同的頁面
import socket

sever_sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sever_sk.bind(('127.0.0.1', 9999))
sever_sk.listen(128)


def index(url):
    s = '這是{}頁面'.format(url)
    return s.encode('utf-8')

def home(url):
    s = '這是{}頁面'.format(url)
    return s.encode('utf-8')

def page(url):
    s = '這是{}頁面'.format(url)
    return s.encode('utf-8')
# 1.定義一個url和執行函數對應關係的列表
url_func_lst = [
    ('/index', index),
    ('/home', home),
    ('/page',page)
]

while True:
    new_sk, addr = sever_sk.accept()
    content = new_sk.recv(1024)
    content = content.decode(encoding='utf-8')
    data = content.split('\r\n')[0]
    url = data.split()[1]
    # 2.定義一個變量來接受對應的函數名稱
    func = None
    # 3.變量列表,查收是否有對應的url
    for url_func in url_func_lst:
        if url_func[0] == url:
            func = url_func[1]
            break
    if func:
        response = func(url)
    else:
        response = b'404 not found...'

    new_sk.send(b'HTTP/1.1 200 OK\r\n')
    new_sk.send(b'Content-Type: text/html;charset=utf-8\r\n')
    new_sk.send(b'\r\n')
    new_sk.send(response)
    new_sk.close()
返回具體的網頁
	#只需要把對應的文件讀取進來,存放到一個變量中,將這個變量傳遞回去即可
	def index(url):
	    with open('index.html', mode='rb') as  f:
	        data = f.read()
	    return data
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章