2015-02-27 4 views
3

я не могу понять, почему этот код работает отлично,Python сокет странное поведение

echo as3333 | nc stat.ripe.net 43 

но эквивалентный код в Python ничего не возвращает

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect(('stat.ripe.net', 43)) 
sock.send('as3333'.encode('utf-8')) 
tmp = sock.recv(1024) 
print(tmp.decode('utf-8')) #no bytes there 
sock.close() 

Спасибо!

ответ

1

Это не совсем то же самое. Вы забыли новую строку и sendall. Фиксированный код:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect(('stat.ripe.net', 43)) 
sock.sendall('as3333\r\n'.encode('utf-8')) 

response = b'' 
while True: 
    tmp = sock.recv(65536) 
    if not tmp: 
     break 
    response += tmp 

print(response.decode('utf-8')) 
sock.close() 
+0

(требуется некоторое время, чтобы собрать весь отклик). –

+0

Отличное исправление, спасибо снова – foo