仅在浏览器上拒绝连接的Python套接字

时间:2015-03-28 17:56:01

标签: python sockets httpserver

我知道这个应用程序将100%无法正常工作,但这只是为了测试,但我期待在我的浏览器上连接拒绝以外的其他一些错误,我甚至没有得到我的浏览器尝试连接的日志!所以它让我想到它的工作之前我需要知道为什么它被拒绝(我这样做是为了试验http!) 注意:我使用套接字而不是任何HTTP库,这个问题只存在于浏览器而不是我写的客户端应用程序,所以其他答案将无法帮助我 这是我的代码:

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 1234                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send(open("GPIOWEB/index.html").read())
   print c.recv(1024)
   c.close()                # Close the connection

客户:

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 1234                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done

2 个答案:

答案 0 :(得分:2)

可以通过浏览器访问你的server.py程序,但你需要告诉浏览器(这样它可以告诉操作系统)你希望如何到达那里

当你这样做时

host = socket.gethostname() # Get local machine name
s.bind((host, 1234))        # Bind to the port

您已绑定到特定界面。

在其中添加print(host)以查看您要绑定的界面。然后,在您的浏览器中输入<host>:1234作为地址 - 其中<host>是打印的内容。

您的浏览器将显示GPIOWEB/index.html的内容,您的server.py程序将显示如下内容:

Got connection from ('127.0.0.1', 63358)
GET / HTTP/1.1
Host: localhost:1234
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

或者,使用

绑定到所有可用的接口
port = 1234                 # Reserve a port for your service.
s.bind(('', port))          # Bind to the port

(注意用于主持人的''

现在,您应该能够通过各种地址与程序通信,例如:

localhost:1234
127.0.0.1:1234
<Your LAN IP>:1234

其中一些可能取决于您的防火墙设置,如果您未获得预期的结果,则可以考虑暂时禁用它,然后相应地更新其配置。

答案 1 :(得分:0)

您在应用中实施了协议:

on_connect SERVER send index.html to CLIENT

您的客户说出此协议。浏览器没有。 使用嗅探器(wireshark,tcpdump等...)来查看服务器 - 客户端流量。