python socket传输文件(视频、图片、文本等)
2019-06-01 23:25
316 查看
socket官方文档:https://docs.python.org/2/library/socket.html
socket中文详细介绍:https://www.geek-share.com/detail/2606760865.html
查看某个端口是否被占用: lsof -i:端口号
客户端
- 创建套接字对象 s
- 连接到远程服务器
- 接受是否连接上的反馈
- 发送数据
- 关闭套接字
#!coding=utf-8 import socket import os import sys import struct def socket_client(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 9001)) except socket.error as msg: print (msg) sys.exit(1) print (s.recv(1024)) # 需要传输的文件路径 filepath = '/home/Image/test.jpg' # 判断是否为文件 if os.path.isfile(filepath): # 定义定义文件信息。128s表示文件名为128bytes长,l表示一个int或log文件类型,在此为文件大小 fileinfo_size = struct.calcsize('128sl') # 定义文件头信息,包含文件名和文件大小 fhead = struct.pack('128sl', os.path.basename(filepath).encode('utf-8'), os.stat(filepath).st_size) # 发送文件名称与文件大小 s.send(fhead) # 将传输文件以二进制的形式分多次上传至服务器 fp = open(filepath, 'rb') while 1: data = fp.read(1024) if not data: print ('{0} file send over...'.format(os.path.basename(filepath))) break s.send(data) # 关闭当期的套接字对象 s.close() if __name__ == '__main__': socket_client()
服务器端
- 创建套接字对象
- 绑定到固定端口
- 监听连接
- 收到请求接收数据
- 关闭套接字
#!coding=utf-8 import threading import socket import struct def socket_service(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定端口为9001 s.bind(('127.0.0.1', 9001)) # 设置监听数 s.listen(10) except socket.error as msg: print (msg) sys.exit(1) print ('Waiting connection...') while 1: # 等待请求并接受(程序会停留在这一旦收到连接请求即开启接受数据的线程) conn, addr = s.accept() # 接收数据 t = threading.Thread(target=deal_data, args=(conn, addr)) t.start() def deal_data(conn, addr): print ('Accept new connection from {0}'.format(addr)) # conn.settimeout(500) # 收到请求后的回复 conn.send('Hi, Welcome to the server!'.encode('utf-8')) while 1: # 申请相同大小的空间存放发送过来的文件名与文件大小信息 fileinfo_size = struct.calcsize('128sl') # 接收文件名与文件大小信息 buf = conn.recv(fileinfo_size) # 判断是否接收到文件头信息 if buf: # 获取文件名和文件大小 filename, filesize = struct.unpack('128sl', buf) fn = filename.strip(b'\00') fn = fn.decode() print ('file new name is {0}, filesize if {1}'.format(str(fn),filesize)) recvd_size = 0 # 定义已接收文件的大小 # 存储在该脚本所在目录下面 fp = open('./' + str(fn), 'wb') print ('start receiving...') # 将分批次传输的二进制流依次写入到文件 while not 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) fp.close() print ('end receive...') # 传输结束断开连接 conn.close() break if __name__ == "__main__": socket_service()
相关文章推荐
- python socket编程(传输字符、文件、图片)
- Android蓝牙socket实现视频实时传输,以及图片和文本传输
- 图片、文本、音视频和应用文件托管必备利器
- python用tcp实现局域网内文件传输(文本,图片,视频)
- Python使用socket传输文件
- python:socket传输大文件示例
- python应用系列教程——python使用smtp协议发送邮件:html文本邮件、图片邮件、文件附件邮件
- 【opencv】python3 将图片生成视频文件
- Python Socket传输文件
- python 间谍程序传输文件 socket编程
- 利用socket传输图片或文件的代码实例
- 网络编程:基于TCP的socket网络传输视频(C++, python)
- java中图片文件的传输及显示(Socket以及ServerSocket演示)
- 用python文件操作实现复制图片、视频
- 用Python教你微信防撤回(文本、图片、语音、视频、名片等...)
- python使用tcp socket 传输文件-服务端,客户端
- python用tcp实现局域网内文件传输(文本,图片,视频)
- 【原】C# 进行socket通信系列之-tcp收发二进制数据,图片、音频、视频、文件等流数据(附完整源码)
- Java使用Socket进行字符串和图片文件同时传输
- Python Socket传输文件示例