Python Socket Timing out

时间:2015-08-13 13:50:52

标签: python sockets

我正试图在端口80上打开一个套接字谷歌但是对于我的生活,我无法弄清楚为什么这会超时。如果我没有设置超时,它就会无限期挂起。

我不认为我公司的防火墙会阻止此请求。我可以在浏览器中导航到google.com,这样就不会有任何挂断。

import socket

HOST = '173.194.121.39'   
PORT = 80             

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.settimeout(20)


data = s.recv(1024)
print(data)
s.close()

1 个答案:

答案 0 :(得分:3)

这将有效:

import socket

HOST = 'www.google.com'
PORT = 80

IP = socket.gethostbyname(HOST)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))

message = b"GET / HTTP/1.1\r\n\r\n"

s.sendall(message)

data = s.recv(1024)
print(data.decode('utf-8'))
s.close()

您的代码有什么问题: 您的代码直接使用IP,我尝试使用socket.gethostbyname()通过主机名查找IP。 (我不知道为什么:P

您希望在不发送任何数据的情况下返回数据。我使用s.sendall方法发送HTTP请求(因为您使用的是python3,数据必须以字节为单位发送)。还解码了返回打印的数据。

我希望,它也适合你。