Форум сайта python.su
0
Объясните, пожалуйста, код ниже получает TCP ответ от сервера на ура:
socket_f = socket.makefile()
data = socket_f.read()
Но, если сервер пришлёт два ответа подряд, в data попадут оба?
И что значит “подряд”? Т.е. в каком случае read() остановится, а в каком продолжит читать? зависит от скорости выполнения?
Я пытаюсь понять, корректно ли обрабатывать ответы таким вот способом или нужно читать сокет в цикле, парся все данные, чтобы найти заголовок протокола, длину сообщения и данные.
Или так, EOF ставит в стрим сама ОС, когда все tcp сегменты сообщения получены?
Отредактировано Virtul (Авг. 11, 2014 16:52:11)
Офлайн
857
Для анализа можешь использовать netcat. Она может быть как клиентом, так и сервером.
import socket HOST = 'localhost' PORT = 8000 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) with sock.makefile('rb') as sin: for i in sin: print(i)
VirtulКогда сокет закроется на стороне сервера.
Т.е. в каком случае read() остановится
Virtul
Я пытаюсь понять, корректно ли обрабатывать ответы таким вот способом или нужно читать сокет в цикле, парся все данные, чтобы найти заголовок протокола, длину сообщения и данные.
Отредактировано py.user.next (Авг. 11, 2014 23:16:44)
Офлайн