[英]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.