使用瀏覽器訪問python寫的伺服器程式
阿新 • • 發佈:2020-01-09
程式碼如下所示:
import socket import re import multiprocessing def service_client(client_socket): data = client_socket.recv(1024) recv_data=data.decode("utf-8") print(recv_data) #GET /index.html HTTP/1.1 ret=re.match(r"[^/]+ /([\S]+\s|\s)",recv_data) file_n="index.html" if ret: if ret.group(1)!=" ": print(ret.group(1)) file_n=ret.group(1) else: print("程式碼有誤!") try: with open(file_n,"rb") as f: content=f.read() f.close() except Exception as r: print(r) content = "<h1>file not found<\h1>".encode("utf-8") header="HTTP/1.1 200 OK\r\n" empty="\r\n" response=(header+empty).encode('utf-8') client_socket.send(response) client_socket.send(content) client_socket.close() print("client_socket.close()已呼叫") def main(): tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) local_addr=("127.0.0.1",7788) tcp_socket.bind(local_addr) tcp_socket.listen(128) while True: client_socket,client_addr = tcp_socket.accept() p=multiprocessing.Process(target=service_client,args=(client_socket,)) p.start() # p.join() tcp_socket.close() if __name__ == "__main__": main()
注意:
1.開始的時候file_n沒有先定義,結果就報錯:local variable ‘file_n' referenced before assignment
2.正則表示式一定要先驗證篩取的內容是否正確。
3.要獲取程式同級資料夾中資料夾的檔案,相對路基為“資料夾名/檔名”
4.tcp_socket.setsockopt(socket.SOL_SOCKET,1) 要加不然容易出現“address already in use"之類的故障
總結
以上所述是小編給大家介紹的使用瀏覽器訪問python寫的伺服器程式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!