1
Я пишу простую программу, чтобы получить число перелетов из моей машины произвольного сайта (в данном случае, www.google.comrecvfrom() не получает каких-либо данных -. Питона
Моя программа кажется . застревать на recvfrom() вызов я установил, что это будет неблокирующей сокет, так что я в состоянии видеть ошибку:
[WinError 10035] A non-blocking socket operation could not be completed immediately
Когда я запускаю его как гнездо запирающего программа просто запускается вечно.
Ниже мой исходный код. Любая идея, почему я столкнулся с этой проблемой? Спасибо!
import socket
import select
import queue
def main(dest_name):
print('launch')
dest_addr = socket.gethostbyname(dest_name)
# Define UDP and ICMP
udp = socket.getprotobyname('udp')
icmp = socket.getprotobyname('icmp')
timer = 0
port = 54321
maxHops = 40
while True:
# Create sender and receiver. Sender uses UDP, receiver uses IDMP
sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
receiver = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
receiver.setblocking(0)
print('sockets assigned')
# Assign TTL to sender, increment TTL
sender.setsockopt(socket.SOL_IP, socket.IP_TTL, timer)
print('ttl assigned')
# Bind socket and send message from sender to receiver
receiver.setblocking(0)
receiver.bind(("", port))
print('receiver bound')
sender.sendto(bytes("", 'UTF-8'), (dest_name, port))
print('sent')
addr = None
print('addr assigned')
try:
# Reads an array of 512-byte sized blocks from sender into addr
(_,addr) = receiver.recvfrom(512)
addr = addr[0]
print("%f\n", addr)
# Process socket errors
except socket.error as exc:
print('Error: please try again.\n')
print('%s\n', exc)
pass
# Close both sockets
finally:
sender.close()
receiver.close()
print('closing')
timer += 1
if dest_addr == addr or timer == maxHops:
break
if __name__ == "__main__":
main('www.google.com')
> не распознается системой по некоторым причинам. Я изменил его на ==, и он все еще ничего не возвращал; он просто бежал вечно. – Haley
woops, это не > это «>» «Больше, чем» закодировано, извините (отредактированный ответ) –
Ничего. Я запускал это на виртуальной машине Linux, и это сработало! Кажется, что-то связано с запуском на машине Windows. Спасибо за вашу помощь. – Haley