En Python, cómo enviar un archivo específico al puerto especificado del host de la otra parte (usando el método socket) ¡Principiante, por favor dame un consejo!
#Remitente
#?-*-?coding:?utf-8?-*-
importar?Tkinter
importar ?tkFileDialog
desde?socket?import?*
import?struct
import?os
def?client(nombre de archivo) :
Addr=('127.0.0.1', 8000)
BUFSIZE=2048
Sendsocket=socket(AF_INET, SOCK_STREAM)
Sendsocket.connect(Addr)
FileHead=struct.pack('128s11i',filename,0,0,0,0,0,0,0,0,os.stat(filename).st_size , 0, 0)
Sendsocket.send(FileHead)
fp=open(nombre de archivo, 'rb')
mientras?1:
FileData=fp.read(BUFSIZE)
if?not?FileData:?
break
Sendsocket.send(FileData)
fp.close()
Sendsocket.close()
def?FileOpen():
r?=?tkFileDialog.askopenfilename(título? = ?'Python?Tkinter',?
filetypes=[('Todos?archivos',?'*')]?)
filename=r.split('/' )
cliente(nombre de archivo[-1])
raíz?=?Tkinter.Tk()
botón1?=?Tkinter.Button(raíz,? texto ?=?'Archivo?Abrir',?height=8,width=14,bg='azul',
comando?=?ArchivoAbrir)
botón1.pack()
root.mainloop()
#Receptor
#?-*-?coding:?utf-8?-*-
from?socket?import?*
importar?os
import?struct
Addr=('127.0.0.1', 8000)
BUFSIZE=1024
FileInfoSize=struct.calcsize('128s32sI8s')
SocketRecv=socket(AF_INET, SOCK_STREAM)
SocketRecv.bind( Addr)
SocketRecv.listen(5)
imprimir?"esperando?....."
conn, addr=SocketRecv.accept (
)
imprimir?"enviar?desde"?, dirección
FileHead=conn.recv(FileInfoSize)
nombre de archivo, temp1, tamaño de archivo, temp2=struct. unpack('128s32sI8s', FileHead)
imprimir?nombre de archivo, len(nombre de archivo), tipo(nombre de archivo)
imprimir?tamaño de archivo
nombre de archivo='new_' nombre de archivo.strip('\00')
fp?=?open(nombre de archivo,'wb')
restsize=tamaño de archivo
mientras?1:
if?restsizelt;BUFSIZE:
filedata=conn.recv(restsize)
otro:
filedata=conn.recv(BUFSIZE )
if?not?filedata:
romper
fp.write(filedata)
restsize=restsize-len(filedata)
if?restsize==0:romper
fp.close()
conn.close()
SocketRecv.close( )
¿Imprimir?'¡¡¿Terminado?!!!'