你用到了recv(buffer_size),那么你用的是TCP协议;tcp协议不同与udp,udp是一次发送,接收到就收到,没收到就会丢弃,也就是掉包.tcp是分段发送的,没记错的话size是在16-4380之间,超过部分会再发,直到服务端收完,如果服务端只手一次的话,也就是说没循环来接收,客户端就会在下一次send前删掉缓存区的数据.
看下下面的代码,改成你的环境下看看打印出来的东西就知道了:
while True:
print "waiting of the client to connect"
clt_conn_sock, addr = sock_svr.accept()
print 'Connected by', addr
comp_data = '' # 完整数据
while True:
data = clt_conn_sock.recv(SIZE)
print data # 这里第一次打印时就是只接收一次的情况
if not data:
break
comp_data += data
clt_conn_sock.close()
if not comp_data:
continue
print comp_data