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         
View Code

    客户端

 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         
View Code

——*—— 1  问题:1,2,3,4,5文件中每行一个数字,os.stat(‘’).st_size 显示13   sys.getsizeof(‘’)为50,传送的每行数据的大小也是为22,24,与总数不一致。

2、由缓存引入的占包问题

 

posted on 2016-07-03 15:21  lexn  阅读(91)  评论(0)    收藏  举报

导航