python知识点结构(五)(5.3接口)5.3.4之网络编程(222-239)之socket模块之传送数据问题
1、客户端向服务端传送文件,服务端什么时候终止接收。
思路:用文件大小来判断是否发送完毕
服务端
1 #! /usr/bin/env python 2 '''Server''' 3 import socket 4 import sys 5 sk = socket.socket() 6 sk.bind(('127.0.0.1',9000)) 7 sk.listen(5) 8 #>1 9 conn,ipadd = sk.accept() 10 #<1 11 conn.sendall('hello,world') 12 #>2 13 file_sz = int(conn.recv(1024)) 14 print file_sz 15 16 file_has = 0 17 f = open(r'C:\Python27\socketpra\recv.txt','wb') 18 while True: 19 if file_has == file_sz: 20 conn.sendall('done') 21 break 22 #<2 23 data = conn.recv(1024) 24 f.write(data) 25 a=sys.getsizeof(data) 26 print a 27 file_has = file_has+a 28 29 while True: 30 a = conn.recv(1024) 31 conn.sendall((a+'good')) 32 33
客户端
1 #! /usr/bin/env python 2 '''Client''' 3 import socket 4 import os 5 import sys 6 sk = socket.socket() 7 #'<1' 8 sk.connect(('127.0.0.1',9000)) 9 #>1 10 data = sk.recv(1024) 11 print data 12 13 #filesz = str(os.stat('C:\Python27\socketpra\cle.txt').st_size) 14 filesz = str(sys.getsizeof('C:\Python27\socketpra\cle.txt')) 15 print filesz 16 #<2 17 sk.sendall(filesz) 18 19 fp = open('C:\Python27\socketpra\cle.txt','rb') 20 while True: 21 for i in fp: 22 print '111' 23 sk.sendall(i) 24 data = sk.recv(1024) 25 print data 26 a = raw_input('please input') 27 if a == 'q': 28 break 29 30 sk.close() 31 32
——*—— 1 问题:1,2,3,4,5文件中每行一个数字,os.stat(‘’).st_size 显示13 sys.getsizeof(‘’)为50,传送的每行数据的大小也是为22,24,与总数不一致。
2、由缓存引入的占包问题
浙公网安备 33010602011771号