Я попытался запустить следующую программу на своем терминале 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()
Но он ничего не печатает и занимает вечность. Я попробовал запустить какую-то онлайн-платформу и получил сообщение об ошибке
"""Traceback (последний последний вызов): файл "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] Время ожидания соединения истекло"""
Я ставлю оператор печати после True: и перед строкой «data =», и он печатает оператор тут же и занимает вечность.
Моя среда 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"
И на другом компе работает.
Кто-нибудь может определить проблему?
Ваша программа хорошо работает на моей MAC OS Mavericks (также известной как 10.9.5) с Python 2.7.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/
Надеюсь это поможет.
В разделе, где написано:
mysock.connect(('www.py4inf.com', 80))
Может быть медленное интернет-соединение - отсюда и тот факт, что это занимает так много времени.
Кроме того, умные веб-сайты эмуляции Python не позволят вам запускать сокеты на своих эмуляторах, поскольку вы можете подделать свой IP-адрес, что может вызвать проблемы с кибербезопасностью.
мммммм