python: socket transfer large file example
本篇文章主要介绍了python:socket传输大文件示例,具有一定的参考价值,有兴趣的可以了解一下,
文件可以传输,但是对比传输前后的文件:socket_test.txt,末尾有一些不一致服务端代码:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") import time ''' 等待连接 等待发送文件 读取数据 写入文件并且保存 等待连接 ''' import socket import threading import time import struct def function(newsock, address): FILEINFO_SIZE = struct.calcsize('128sI') '''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)''' while 1: try: fhead = newsock.recv(FILEINFO_SIZE) filename, filesize = struct.unpack('128sI', fhead) '''把接收到的数据库进行解包,按照打包规则128sI''' print "address is: ", address print filename, len(filename), type(filename) print filesize #filename = 'new_'+filename.strip('\00') # 命名新文件new_传送的文件 filename = filename.strip('\00') fp = open(filename, 'wb') # 新建文件,并且准备写入 restsize = filesize print "recving..." while 1: if restsize > 102400: # 如果剩余数据包大于1024,就去1024的数据包 filedata = newsock.recv(10240) else: filedata = newsock.recv(restsize) fp.write(filedata) #break if not filedata: break fp.write(filedata) restsize = restsize - len(filedata) # 计算剩余数据包大小 if restsize <= 0: break fp.close() print "recv succeeded !!File named:", filename except Exception, e: print unicode(e).encode('gbk') print "the socket partner maybe closed" newsock.close() break sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建tcp连接 sock.bind(('10.240.146.82', 8887)) # 定于端口和ip sock.listen(5) # 监听 while True: newsock, address = sock.accept() print "accept another connection" tmpThread = threading.Thread(target=function, args=(newsock, address)) # 如果接收到文件,创建线程 tmpThread.start() # 执行线程 print 'end'
客户端代码:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") ''' 输入文件名,并且上传 ''' import socket import time import struct import os f = open('socket_test.txt', 'wb') for i in range(1000000): f.write('for socket test, the line number is : ' + str(i) + '\n') f.close() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(50) e = 0 try: sock.connect(('10.240.146.82', 8887)) print 'connect...' except socket.timeout, e: print 'timeout', e except socket.error, e: print 'error', e except e: print 'any', e if not e: #while (1): #filename = raw_input('input your filename------->') # 输入文件名 filename = 'socket_test.txt' FILEINFO_SIZE = struct.calcsize('128sI') # 编码格式大小 fhead = struct.pack('128sI', filename, os.stat(filename).st_size) # 按照规则进行打包 sock.send(fhead) # 发送文件基本信息数据 fp = open(filename, 'rb') fp2 = open('local_test.txt','wb') i = 0 while 1: # 发送文件 filedata = fp.read(10240) if not filedata: break sock.sendall(filedata) fp2.write(filedata) print i i = i + 1 print "sending over..." fp.close() fp2.close()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多python:socket传输大文件示例相关文章请关注PHP中文网!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

Regular expressions are powerful tools for pattern matching and text manipulation in programming, enhancing efficiency in text processing across various applications.

How does Uvicorn continuously listen for HTTP requests? Uvicorn is a lightweight web server based on ASGI. One of its core functions is to listen for HTTP requests and proceed...

The article discusses popular Python libraries like NumPy, Pandas, Matplotlib, Scikit-learn, TensorFlow, Django, Flask, and Requests, detailing their uses in scientific computing, data analysis, visualization, machine learning, web development, and H

In Python, how to dynamically create an object through a string and call its methods? This is a common programming requirement, especially if it needs to be configured or run...
