幽灵资源网 Design By www.bzswh.com
文件可以传输,但是对比传输前后的文件: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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
幽灵资源网 Design By www.bzswh.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
幽灵资源网 Design By www.bzswh.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。