Python 网络编程

2024-12-31 09:25:53
推荐回答(1个)
回答1:

你用到了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