繁体   English   中英

Python套接字:如何获取客户端连接的地址?

[英]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
  1. 指定URL使用TCP 的哪个协议
  2. 通过IP地址或主机名指定远程主机
  3. 指定远程端口,并且是可选的
  4. 指定URL的路径

但是,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM