python学习:socket

客户端

#!/usr/bin/env python
#coding:utf-8

import  socket,os,hashlib


client=socket.socket()

client.connect(('localhost',6969))

while True:
    cmd=input('>>:').strip()
    if cmd.startswith('get'):

        client.send(cmd.encode('utf-8'))
        server_response=client.recv(1024)

        client.send(b'ready...')

        file_total_size=int(server_response)

        revice_size=0
        filename=cmd.split()[1]
        f=open(filename+'.new','wb')
        m=hashlib.md5()
        while revice_size < file_total_size:

            if file_total_size-revice_size>1024:
                size=1024
            else:
                size=file_total_size-revice_size

            data=client.recv(size)
            f.write(data)
            revice_size+=len(data)
            m.update(data)
            #print(file_total_size,revice_size)
        else:
             print('done...')
             new_file_md5=m.hexdigest()
             f.close()
        #client.send(b'wait...')
        old_file_md5=client.recv(1024).decode()
        print('源文件:'+old_file_md5,'新文件:'+new_file_md5)



client.close()

服务端:

#!/usr/bin/env python
#coding:utf-8


import  socket,os,hashlib


server=socket.socket()
server.bind(('localhost',6969))
server.listen(4)

print('监听中...')
while True:
    conn,addr=server.accept()
    # print(conn,addr)
    print('数据来了...')
    while True:
            data=conn.recv(1024)
            if not data:
                print('丢失连接')
                break
            cmd,filename=data.decode().split()
            print('传输文件:',filename)

            if os.path.isfile(filename):
                f=open(filename,'rb')
                m=hashlib.md5()
                file_size=os.stat(filename).st_size
                conn.send(str(file_size).encode('utf-8'))
                conn.recv(1024)
                for line in f:
                    m.update(line)
                    conn.send(line)
                #发送md5
                #conn.recv(1024)
                conn.send(m.hexdigest().encode())
                f.close()

server.close()

 

posted @ 2017-03-02 13:00  alston-lee  阅读(162)  评论(0编辑  收藏  举报