如何读取二进制文件?

1 投票
2 回答
2893 浏览
提问于 2025-04-16 11:39

我想在我家网络中的客户端和服务器之间发送一个文件。我只想用一个简单的文件,叫做 client.txt 来测试一下。

客户端程序应该读取一定数量的字节,然后通过我创建的tcp连接发送出去,但我就是搞不懂怎么发送这一部分:

f = open("client.txt", "rb")
while 1:
// should read X bytes and send to the socket

我觉得我需要检查一下我想发送的数据是否有效,比如说,如果一个文件的大小小于我每次发送的数量(比如1024字节),这样做是否可行呢?还是说不可以这样理解?

2 个回答

1

read() 这个函数可以接收一个可选的参数,用来指定要读取多少字节的数据。

文档链接

要读取文件的内容,可以使用 f.read(size) 这个方法,它会读取一定数量的数据并把它作为字符串返回。这里的 size 是一个可选的数字参数。如果你不提供 size 或者提供的是负数,函数会读取文件的全部内容并返回;如果文件的大小超过了你电脑的内存,那就得你自己处理这个问题了。否则,最多会读取 size 字节的数据并返回。如果已经到达文件的末尾,f.read() 会返回一个空字符串 ("")。

4

因为你提到在设置服务器部分遇到问题,我从Python的文档中摘录了一些内容,并稍微做了一些修改:

import socket

HOST = ''
PORT = 50007

s = socket.socket()
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()

f = open("client.txt", "rb")
while 1:
    data = f.read(1024)
    if not data: break
    conn.send(data)
conn.close()

相关的文档可以在这里找到

撰写回答