[英]Python sockets: How do I get the address a client is connected to?
我有一些托管本地服務器的代碼,當用戶連接時它將向他們發送一些html代碼,效果很好。 但是我想要這樣,如果他們連接到http:// localhost:90 / abc ,它將顯示不同的內容。 如何獲得他們連接的確切網址?
這是我的代碼:
import socket
sock = socket.socket()
sock.bind(('', 90))
sock.listen(5)
print("Listening...")
while True:
client, address = sock.accept()
print("Connection recieved: ", address)
print(The exact url they connected to.)
print()
client.send(b'HTTP/1.0 200 OK\r\n')
client.send(b"Content-Type: text/html\r\n\r\n")
client.send(b'<html><body><h1>Hello, User!</body></html>')
client.close()
sock.close()
我嘗試了print(client.getpeername()[1])
,但是那會獲得客戶端ip,如果有類似的方法來獲取ip,他們可能會連接到它的abc部分。
提前致謝。
套接字沒有URL的概念,該概念特定於在socket之上運行的HTTP協議。 因此,創建套接字時甚至只使用HTTP URL的一部分。
|--1---|----2----|-3-|--4-|
http:// localhost :90 /abc
但是,TCP套接字實際上僅知道第2部分和第3部分! 這是因為TCP是一種非常基本的通信形式,HTTP在其之上添加了很多功能,例如請求,響應和路徑等。
基本上,如果您要實現HTTP服務器,那么知道/ abc部分就是您的工作。 看一下這個例子 。 客戶端實際上將/ abc部分發送到服務器,否則無法知道請求的路徑。
當客戶端連接到您的服務器時,它將發送:
GET /abc HTTP/1.1
Host: localhost
more headers...
<blank line>
您的服務器需要解析GET
行並從中提取/abc
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.