當前位置:編程學習大全網 - 編程語言 - python中,如何將壹個指定的文件發送到對方主機的指定端口呢(用socket方式) 新手求指教!

python中,如何將壹個指定的文件發送到對方主機的指定端口呢(用socket方式) 新手求指教!

#發送端

#?-*-?coding:?utf-8?-*-

import?Tkinter

import?tkFileDialog

from?socket?import?*

import?struct

import?os

def?client(filename):

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(filename,'rb')

while?1:

FileData=fp.read(BUFSIZE)

if?not?FileData:?

break

Sendsocket.send(FileData)

fp.close()

Sendsocket.close()

def?FileOpen():

r?=?tkFileDialog.askopenfilename(title?=?'Python?Tkinter',?

filetypes=[('All?files',?'*')]?)

filename=r.split('/')

client(filename[-1])

root?=?Tkinter.Tk()

button1?=?Tkinter.Button(root,?text?=?'File?Open',?height=8,width=14,bg='blue',

command?=?FileOpen)

button1.pack()

root.mainloop()

#接收端

#?-*-?coding:?utf-8?-*-

from?socket?import?*

import?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)

print?"waitting?........"

conn,addr=SocketRecv.accept()

print?"send?from"?,addr

FileHead=conn.recv(FileInfoSize)

filename,temp1,filesize,temp2=struct.unpack('128s32sI8s',FileHead)

print?filename,len(filename),type(filename)

print?filesize

filename='new_'+filename.strip('\00')

fp?=?open(filename,'wb')

restsize=filesize

while?1:

if?restsize<BUFSIZE:

filedata=conn.recv(restsize)

else:

filedata=conn.recv(BUFSIZE)

if?not?filedata:

break

fp.write(filedata)

restsize=restsize-len(filedata)

if?restsize==0:break

fp.close()

conn.close()

SocketRecv.close()

print?'Finished?!!!'

  • 上一篇:數學建模算法(番外4)解決規劃問題的神器——Lingo(下)
  • 下一篇:面料成品克重計算方法
  • copyright 2024編程學習大全網