python中,如何将一个指定的文件发送到对方主机的指定端口呢(用socket方式) 新手求指教!

python中,如何将一个指定的文件发送到对方主机的指定端口呢(用socket方式)新手求指教!望大神解答!... python中,如何将一个指定的文件发送到对方主机的指定端口呢(用socket方式) 新手求指教!望大神解答! 展开
 我来答
丽江海月客栈
2014-06-18 · TA获得超过581个赞
知道小有建树答主
回答量:383
采纳率:100%
帮助的人:175万
展开全部
#发送端
# -*- 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 !!!'
匿名用户
2014-06-18
展开全部
用邮件吧。email
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式