2012-12-03 87 views
1

我是套接字編程的新手,有人可以告訴我什麼是錯誤的,我在這裏做。我得到這個錯誤。我沒有把它定義爲一個函數。當我從main調用它時,它給了我這個錯誤。有人請幫忙!錯誤:[Errno 10054]一個現有的連接被遠程主機強制關閉

#!/usr/bin/env python 
import socket 
import sys 
import urlparse 
from urlparse import urlparse 

def main(url): 
    t=url 
    o = urlparse(t) 
    x=".".join(o.netloc.split(".")[-2:]) 
    head1= o.path 
    host = o.netloc 
    port = 80 

    try: 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    except socket.error, msg: 
    sys.stderr.write("[ERROR] %s\n" % msg[1]) 
    sys.exit() 
    try: 
    sock.connect((host, port)) 
    except socket.error, msg: 
    sys.stderr.write("[ERROR] %s\n" % msg[1]) 
    sys.exit() 
    try: 
    sock.send("HEAD %s HTTP/1.0\r\n\r\n" % head1) 
    except sock.error: 
    sys.exit() 

    s=sock.recv(600) 
    sock.shutdown() 
    import sys 
    sys.exit 
    sock.close() 
    return s 

x=main("www.google.ca") 
print x 

ERROR I get: 
Traceback (most recent call last): 
File "C:/myserver/cgi-bin/domainsockettest.py", line 47, in <module> 
x=main("www.google.ca") 
File "C:/myserver/cgi-bin/domainsockettest.py", line 40, in main 
s=sock.recv(600) 
error: [Errno 10054] An existing connection was forcibly closed by the remote host 
+1

什麼在地球上做'當我不調用它定義爲一個函數'是什麼意思? – EJP

回答

1

我建議你打印出你的中間值,直到你確定你在做什麼。現在看來,你的URL拆分邏輯搞砸:

>>> o = urlparse.urlparse('www.google.ca') 
>>> o.path 
'www.google.ca' 
>>> o.netloc 
'' 
>>> 

另外:

  • 電話sys.exit()缺少括號,
  • 您正在嘗試的是退出後做一些事情,
  • 返回關閉的插座是完全沒用的。
+0

嗨尼古拉,感謝您的幫助。我刪除了o.netloc而不是我使用t = url o = urlparse(t) x =「。」。join(t.split(「。」)[ - 2:] )#x將是我的域名。 –

+0

用於返回收到的字符串,如「http 1.1 200 ok」,您是否建議任何想法。請提前致謝。 –

+0

我不明白你的問題。更多地解釋你想做什麼,也許人們可以幫助更多。 –

相關問題