python socket 发送图片

2022-08-17 14:39:34

服务端

# -*- coding=utf-8 -*-import socketimport threadingimport sysimport osimport structdefdeal_data(conn, addr):print('Accept new connection from {0}'.format(addr))whileTrue:
        fileinfo_size= struct.calcsize('128sl')# linux 和 windows 互传 128sl 改为 128sq  机器位数不一样,一个32位一个64位
        buf= conn.recv(fileinfo_size)print('收到的字节流:', buf,type(buf))if buf:print(buf,type(buf))
            filename, filesize= struct.unpack('128sl', buf)
            fn= filename.strip(str.encode('\00'))
            new_filename= os.path.join(str.encode('./'),str.encode('new_')+ fn)print('file new name is {0}, filesize if {1}'.format(new_filename, filesize))
            recvd_size=0# 定义已接收文件的大小withopen(new_filename,'wb')as fp:print("start receiving...")whilenot recvd_size== filesize:if filesize- recvd_size>1024:
                        data= conn.recv(1024)
                        recvd_size+=len(data)else:
                        data= conn.recv(filesize- recvd_size)
                        recvd_size= filesize

                    fp.write(data)print("end receive...")
        conn.close()breakdefsocket_service():try:
        s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
        s.bind(('',12345))# 这里换上自己的ip和端口
        s.listen(10)except socket.erroras msg:print(msg)
        sys.exit(1)print("Waiting...")whileTrue:
        conn, addr= s.accept()
        t= threading.Thread(target=deal_data, args=(conn, addr))
        t.start()if __name__=='__main__':
    socket_service()

客户端

# -*- coding=utf-8 -*-import socketimport osimport sysimport structdefsocket_client():try:
        s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(('192.168.0.66',12345))except socket.erroras msg:print(msg)
        sys.exit(1)whileTrue:
        filepath=input("please input file path: ")if os.path.isfile(filepath):# 定义定义文件信息。128s表示文件名为128bytes长,l表示一个int或log文件类型,在此为文件大小
            fileinfo_size= struct.calcsize('128sl')# 定义文件头信息,包含文件名和文件大小
            fhead= struct.pack('128sl',bytes(os.path.basename(filepath).encode('utf-8')), os.stat(filepath).st_size)
            s.send(fhead)print('client filepath: {0}'.format(filepath))withopen(filepath,'rb')as fp:whileTrue:
                    data= fp.read(1024)ifnot data:print('{0} file send over...'.format(filepath))break
                    s.send(data)
        s.close()breakif __name__=='__main__':
    socket_client()
  • 作者:小和尚敲木头
  • 原文链接:https://blog.csdn.net/w710537643/article/details/112707313
    更新时间:2022-08-17 14:39:34