Python Socket File Transfer

I have a RPi which I intented to use it to crawl data. The development environment in RPi is very bad, so I did my programing in PC. This lead to an issue that I need to transfer the distribution from my PC to RPi. I does not want to use thumbdrive as the RPi will not be located near my PC. So I wrote an application to transfer file from my PC to RPi.

server is the receiver and client is the transmitter.
I also take care of if the file in a subdirectory.

server

import socket
import os print('Waiting for clinet to connect...')
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.bind(('', 1234))
c.listen(1)
s, a = c.accept() print('Connected. Going to receive file.')
s.sendall('getfilename')
filename = s.recv(1024)
if '/' in filename:
dir = os.path.dirname(filename)
try:
os.stat(dir)
except:
print('Directory does not exist. Creating directory.')
os.mkdir(dir)
f = open(filename, 'wb')
print('Filename: ' + filename) while True:
s.sendall('getfile')
size = int(s.recv(16))
print('Total size: ' + str(size))
recvd = ''
while size > len(recvd):
data = s.recv(1024)
if not data:
break
recvd += data
f.write(data)
#print(len(recvd))
break
s.sendall('end')
print('File received.') s.close()
c.close()
f.close()

client

import socket
import sys if len(sys.argv) > 1 :
print('Trying to connect...')
s = socket.socket()
s.connect(('127.0.0.1', 1234)) print('Connected. Wating for command.')
while True:
cmd = s.recv(32) if cmd == 'getfilename':
print('"getfilename" command received.')
s.sendall(sys.argv[1]) if cmd == 'getfile':
print('"getfile" command received. Going to send file.')
with open(sys.argv[1], 'rb') as f:
data = f.read()
s.sendall('%16d' % len(data))
s.sendall(data)
print('File transmission done.') if cmd == 'end':
print('"end" command received. Teminate.')
break
上一篇:【转载】uCOS2 关于进程调度的O(1)算法


下一篇:NTP服务搭建