socket编程_文件上传下载

上一篇提到的问题有一点儿误解,其实真正的问题有2个:

问题一: 服务器端接收了1024个字节之后就进入下一次循环,等待下一次连接去了.而不处理1024字节之后的文件内容.导致接收不全.

问题二: 把quit当做文件内容进行保存了,解决办法 可以添加确认信息到两端,每发送1024字节等待对方确认成功,否则其他信息就是完结了.最后再发送一个quit指令关闭.

理解还是不到位,哪位大神欢迎指出症结.

服务器端:

import socket

# 实例化
sk = socket.socket()

ip_port = ('127.0.0.1', 9999)
#绑定
sk.bind(ip_port)
#监听
sk.listen(5)

while True:
    conn, address = sk.accept()

    # 当连进来之后,就一直使用当前连接进行数据发送
    # 直到结束标志出现
    while True:
        with open("file_bak", "ab") as f:
            data = conn.recv(1024)
            print(data.decode())
            if data == b"quit":
                break
            f.write(data)

        # 接收完成标志
        conn.send('success'.encode())

    # 打印提示信息
    print('文件接收完成')

print('正在关闭服务...')
sk.close()

客户端:

import socket

# 实例化
import time

sk = socket.socket()

# ip和端口
ip_port = ('127.0.0.1',9999)
#连接
sk.connect(ip_port)

# 文件上传
# 打开文件
with open('file_1', 'rb') as f:
    # 数据分割
    for i in f:
        # 上传
        sk.send(i)

        # 等待接收完成
        data = sk.recv(1024)
        print(data)
        # 判断服务器端是否接收并写入
        if data != b'success':
            break

sk.send('quit'.encode())
print('已发送关闭指令')

猜你喜欢

转载自blog.csdn.net/abcdasdff/article/details/81990368