1

私はソケットプログラミングの初心者ですが、誰かがここで何が間違っているのか教えてもらえますか?このエラーが発生します。このプログラムは、関数として定義することを呼び出していないときに正常に動作します。メインから呼び出した瞬間、私にこのエラーを与えます。誰か助けてください!

#!/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
4

1 に答える 1

1

自分が何をしているのか確信が持てるまで、中間値を印刷することをお勧めします。現在、URL 分割ロジックが台無しになっているようです。

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

また:

  • への呼び出しにsys.exit()括弧がありません。
  • あなたはその出口の後に何かをしようとしています、
  • 閉じたソケットを返すことはまったく役に立ちません。
于 2012-12-03T13:32:06.820 に答える