如何用python建立最簡單的伺服器

ckxllf發表於2019-12-02

  本文使用socket實現,

  使用python訪問

  

在這裡插入圖片描述

  

在這裡插入圖片描述

  下面,我們開始講解實現方法

  import socket

  # 1. 建立套接字並設定伺服器釋放

  web_server= socket.socket(socket.AF_INET, socket.SOCK_STREAM,socket.IPPROTO_TCP)

  .web_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

  # 2. 繫結埠

  web_server.bind(("127.0.0.1", 26332))

  # 3. 監聽套接字

  web_serve.listen(128)

  第一步:我們首先建立一個套接字,第一行,套接字的引數有3個,這裡不具體講解,只要將程式碼複製過去就可以了。第二行涉及到TCP3次握手和4次揮手,只要知道,當我們伺服器主動發起關閉客戶端連線時,或者意外中斷後,埠不會被佔用。

  第二步:繫結埠,為什麼要繫結埠,因為你只有繫結埠別人才能知道如何找到你。

  如果是在本地執行,就繫結127.0.0.1,埠號可以隨意輸入

  如果是在遠端伺服器,就輸入遠端伺服器的IP地址。同時把安全規則把對應埠開放。

  第三步:我們繫結埠以後,就要監聽埠,如果不監聽埠,就無法知道有人連線你了。

  while True:

  web_client,client_ip=web_serve。accept()

  第四步:當我們繫結好埠以後,我們就要開始等待客戶端連線。如果客戶端連線,它才會進行下一步,如果沒有連線,它會阻塞在這一步。

  import multiprocessing

  process=multiprocessing.Process(target=web_requests,args=(web_client,))

  process.start()

  web_client.close() 鄭州治療婦科的醫院

  第五步:當我們接收到客戶端連線後,我們就要為這個客戶端建立一個程式,去為它服務,因為程式是複製一份web_client,所以我們就可以把程式所指向的web_client給關了(程式所指向的由程式關閉),迴圈等待下一個客戶端連線

  def web_requests(web_client):

  web_requests=web_client.recv(1024).decode("utf-8")

  定義一個程式函式,然後接收客戶端發來的資料,web_client.recv(1024)中recv(1024)是接收客戶端發來的資料,.decode(“utf-8”)是對客戶端發來的資料進行解碼

  import re

  web_request=web_requests.splitlines()[0] #將收到的資料轉為列表,取出第一行引數:GET /s?kw=hello,word HTTP/1.1

  request_kw=re.findall("kw=(.*?).HTTP",web_request) [0] #取出收到的引數

  我們在爬取百度的時候,經常會用到wd=,&pn=,所以在這裡,我們也使用傳參的方式kw=,讓伺服器收到我們的請求,並返回傳入的引數值,當我們收到請求時,我門就要開始返回資料

  response_head="HTTP/1.1 200 OK\r\n\r\n".encode("utf8") #返回head

  response_body=request_kw.encode("utf8") #返回body

  返回資料分為head和body,這裡要著重說明,在瀏覽器中,返回的head是不顯示在頁面的,可以透過f12去檢視我們返回的head,在python中,我們用requests獲取內容,預設不會返回head部分

  body是我們返回的主體,可以是url,也可以檔案,但注意,一定要轉為二進位制

  web_client.send(response_head)

  web_client.send(response_body)

  然後,我們使用send函式返回客戶端head和body,這時,客戶端就可以接收到我們傳送的資料了。

  一定要記住,web_client.recv()接收客戶端請求資料,web_client.send()返回給客戶端資料,最後不要忘了編碼和解碼

  web_client.close()

  返回客戶端資料以後,我們將程式中的連線關閉。

  以上是全部程式碼,大家把所有程式碼複製,直接執行就可以了,這裡給大家出個題目,如果設定需要驗證密碼,如果客戶端傳入密碼正確,就返回資料,不正確,就返回密碼錯誤


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2666466/,如需轉載,請註明出處,否則將追究法律責任。

相關文章