Skip to main content
 首页 » 编程设计

python之为什么这个程序挂起

2025年05月04日18jirigala

<分区>

我正在粘贴整个代码,因为我认为它尽可能短;

import socket 
 
def recv_all(sock): 
    parts = [] 
    while True: 
        msg = "" 
        msg = sock.recv(4096) 
        print "recieved", len(msg), "bytes." 
        if not msg: 
            break 
        parts.append(msg) 
    return "".join(parts) 
 
http_request = """GET / HTTP/1.1 
Host: {} 
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; tr) Presto/2.10.229 Version/11.64 
Accept: text/html, application/xml;q=0.9, application/xhtml xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 
Accept-Language: en 
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1 
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 
Connection: Keep-Alive, TE 
TE: deflate, gzip, chunked, identity, trailers 
 
 
""" 
site = "www.google.com.tr" 
print "creating connection" 
conn = socket.create_connection((site,80)) 
print "sending data" 
conn.sendall(http_request.format(site)) 
print "recieving response" 
response = recv_all(conn) 
print "closing connection" 
conn.close() 
 
print response 

当我运行它时,我得到了这个输出;

creating connection 
sending data 
recieving response 
recieved 3743 bytes. 
recieved 4096 bytes. 
recieved 4096 bytes. 
recieved 4096 bytes. 
recieved 3472 bytes. 
recieved 1648 bytes.

我期望它做的是在读取最后一个 block (在本例中为 1648)后读取 0 个字节。但它一直在等待。

我在 Windows 7 上使用 Python 2.7。

我在这里做错了什么?我应该怎么做才能使其按预期工作?