Loading year2/source/lessons/07-threads.rst 0 → 100644 +93 −0 Original line number Diff line number Diff line Потоки. Передача файлов. Клиент-серверный чат ============================================== Передача файлов ---------------- Передачу файлов с помощью сокетов можно реализовать по следующей схеме: 1. Настраиваем сокет, устанавливаем соединение. 2. **На отправляющей стороне**: - открываем файл на чтение в режиме байтового чтения (``'rb'``). - построчно передаём файл принимающей стороне (``'rb'``). 3. **На принимающей стороне**: - открываем файл на запись в режиме байтовой записи (``'wb'``). - построчно пишем в файл всё, что получаем от передающей стороны. 4. Закрываем файлы и соединение. Пример кода для отправки файла с клиента серверу. Сервер:: import socket import sys # создаём сокет и связываем его с IP-адресом и портом sock = socket.socket() ip = "localhost" port = 9999 sock.bind((ip, port)) # сервер ожидает передачи информации sock.listen(10) while True: # начинаем принимать соединения conn, addr = sock.accept() # выводим информацию о подключении print('connected:', addr) # получаем название файла name_f = (conn.recv(1024)).decode ('UTF-8') # открываем файл в режиме байтовой записи в отдельной папке 'sent' f = open('sent/' + name_f,'wb') while True: # получаем байтовые строки l = conn.recv(1024) # пишем байтовые строки в файл на сервере f.write(l) if not l: break f.close() conn.close() print('File received') sock.close() Клиент:: import socket import sys ip = "localhost" port = 9999 # создаём сокет для подключения sock = socket.socket() sock.connect((ip,port)) # запрашиваем имя файла и отправляем серверу f_name = input ('File to send: ') sock.send((bytes(f_name, encoding = 'UTF-8'))) # открываем файл в режиме байтового чтения f = open (f_name, "rb") # читаем строку l = f.read(1024) while (l): # отправляем строку на сервер sock.send(l) l = f.read(1024) f.close() sock.close() Loading
year2/source/lessons/07-threads.rst 0 → 100644 +93 −0 Original line number Diff line number Diff line Потоки. Передача файлов. Клиент-серверный чат ============================================== Передача файлов ---------------- Передачу файлов с помощью сокетов можно реализовать по следующей схеме: 1. Настраиваем сокет, устанавливаем соединение. 2. **На отправляющей стороне**: - открываем файл на чтение в режиме байтового чтения (``'rb'``). - построчно передаём файл принимающей стороне (``'rb'``). 3. **На принимающей стороне**: - открываем файл на запись в режиме байтовой записи (``'wb'``). - построчно пишем в файл всё, что получаем от передающей стороны. 4. Закрываем файлы и соединение. Пример кода для отправки файла с клиента серверу. Сервер:: import socket import sys # создаём сокет и связываем его с IP-адресом и портом sock = socket.socket() ip = "localhost" port = 9999 sock.bind((ip, port)) # сервер ожидает передачи информации sock.listen(10) while True: # начинаем принимать соединения conn, addr = sock.accept() # выводим информацию о подключении print('connected:', addr) # получаем название файла name_f = (conn.recv(1024)).decode ('UTF-8') # открываем файл в режиме байтовой записи в отдельной папке 'sent' f = open('sent/' + name_f,'wb') while True: # получаем байтовые строки l = conn.recv(1024) # пишем байтовые строки в файл на сервере f.write(l) if not l: break f.close() conn.close() print('File received') sock.close() Клиент:: import socket import sys ip = "localhost" port = 9999 # создаём сокет для подключения sock = socket.socket() sock.connect((ip,port)) # запрашиваем имя файла и отправляем серверу f_name = input ('File to send: ') sock.send((bytes(f_name, encoding = 'UTF-8'))) # открываем файл в режиме байтового чтения f = open (f_name, "rb") # читаем строку l = f.read(1024) while (l): # отправляем строку на сервер sock.send(l) l = f.read(1024) f.close() sock.close()