実行に永遠に時間がかかるPythonソケットプログラム


1

Mac端末で次のプログラムを実行しようとしました。

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send('GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print data;
mysock.close()

しかし、それは何も印刷せず、永遠にかかります。オンラインプラットフォームを実行しようとしてエラーメッセージが表示されました

"" "トレースバック(最新の呼び出しは最後):ファイル" main.py "、行6、mysock.connect(( 'www.py4inf.com'、80))ファイル" /usr/lib64/python2.7/socket .py "、行228、meth return getattr(self._sock、name)(* args)socket.error:[Errno 110] Connection timed out" ""

True:の後、行 "data ="の前にprintステートメントを配置すると、そこにステートメントが出力され、その後永遠にかかります。

私のPython環境は

"Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin"

そして、別のコンピューターで動作します。

誰でも問題を特定できますか?


マークダウンを使用してコードをフォーマットしてください-FAQを参照してください-また、コードをスクリーンショットではなくテキストとして表示して、コピー、実行、テストできるようにしてください。また、telnetなどを使用して、そのコンピューター上のそのURLに接続できますか?
マーク

回答:


1

あなたのプログラムは、Python 2.7.5で私のMAC OS Mavericks(別名10.9.5)でうまく動作します。

HTTP/1.1 200 OK
Date: Sun, 27 Mar 2016 07:42:22 GMT
Server: Apache
Last-Modified: Fri, 04 Dec 2015 19:05:04 GMT
ETag: "e103c2f4-a7-526172f5b5d89"
Accept-Ranges: bytes
Content-Length: 167
Cache-Control: max-age=604800, public
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type
Access-Control-Allow-Methods: GET
Connection: close
Content-Type: text/plain

But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fai
r sun and kill the envious moon
Who is already sick and pale with grief

TCPプロトコルのタイムアウト(サーバーが応答していないか、リンクに障害が発生している)内で応答が得られなかった間に、プログラムが停止したと思います。そのような場合を避けたい場合は、「recv」ステートメントを別のスレッドに入れて、タイムアウト後に中断することができます。私はこのページでこれについて多くの助けを見つけました:eli.thegreenplace.net/2011/05/18/code-sample-socket-client-thread-in-python/

お役に立てれば。


0

それが言うセクションで:

mysock.connect(('www.py4inf.com', 80))

低速のインターネット接続が存在する可能性があります-そのため、時間がかかります。

また、賢いpythonエミュレーションWebサイトでは、IPを偽装する可能性があり、Cyber​​Securityの問題を引き起こす可能性があるため、エミュレーターでソケットを実行できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.