# -*- coding: utf-8 -*- import socket def retrieve(url, path): host,url=url.split('//',1)[-1].split('/',1) client=socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0, None) client.connect((socket.gethostbyname(host), 80)) print('ok connect') client.send('GET /%s HTTP/1.0\r\nHost: %s\r\nUser-agent: Mozila\r\n\r\n' % (url, host)) string=client.recv(1024).split('\r\n') for t in range(len(string)): if not string[t] or string[t].isspace(): break print('\r\n'.join(string[:t+1])) # Header string = ['\r\n'.join(string[t+1:])] while True: part = client.recv(1024) if not part: break string.append(part) open(path, 'w').write(''.join(string)) print('Done') if __name__=='__main__': retrieve('http://python.su/media/blog/images/devconf.png', '/sdcard/python.png')
dimy44У меня не возвращается пустая строка при окончании передачи, просто выполнение останавливается на получении данных conn.recv(1024).
Пустая строка говорит о том, что данные переданы
import socket HOST = '' PORT = 8080 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) srv.bind((HOST, PORT)) while True: print(u"Слушаю порт {}".format(PORT)) srv.listen(1) sock, addr = srv.accept() while True: pal = sock.recv(1024) if not pal: break print(u"Получено от {}: {}:".format(addr, pal.decode('utf8'))) sock.send(pal) sock.close()
# -*- coding: utf-8 -*- # python 2.6.2 import socket import threading import time HOST = '' PORT = 8080 def server(): srv = socket . socket(socket .AF_INET, socket . SOCK_STREAM) srv. setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR , 1) srv .bind((HOST, PORT)) srv.listen(1) sock, addr = srv.accept() s = '' while True: pal = sock.recv(1024) s += pal if not pal: break print ('Я сервер, получил от {0}: {1}' . format(addr, s)) sock.send(s.upper()) sock.close() th =threading.Thread(None, server, '', ()) th.start() time.sleep(1) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', PORT)) sock.send('qwertyuiasdfghjk') sock.shutdown(socket.SHUT_WR) result = sock.recv(1024) sock.close() print('Я клиент, получил ответ: {0}'.format(result))