gpt4 book ai didi

python - TCP 套接字文件传输

转载 作者:太空狗 更新时间:2023-10-30 01:45:21 24 4
gpt4 key购买 nike

我正在尝试使用 Python 和 AES 编写安全传输文件程序,但我遇到了一个我不完全理解的问题。我通过用 1024 字节 block 解析它并发送它们来发送我的文件,但是接收数据的服务器端崩溃(我使用 AES CBC 因此我的数据长度必须是 16 字节的倍数)并且我得到的错误说它是不是。

我尝试在客户端打印客户端发送的数据长度和在服务器端接收的数据长度,它显示客户端每次都像预期的那样发送 1024 个字节,但是服务器端显示在某个时间点,接收到的数据包不小于 1024 字节(例如 743 字节)。

我试图在客户端发送的每个套接字之间放置一个 time.sleep(0.5),它似乎可以工作。是否可能是服务器端的某种套接字缓冲区故障?客户端发送的数据太多太快,并且它以某种方式破坏了服务器端的套接字缓冲区,因此数据已损坏或消失并且 recv(1024) 只接收到一个损坏的 block ?这是我唯一能想到的,但这也可能是完全错误的,如果有人知道为什么这不能正常工作,那就太好了;)

按照我的想法,我尝试了:

    self.s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 32768000)
print socket.SO_RCVBUF

我试图在服务器端放置一个 32 兆字节的缓冲区,但在 Windows XP 上它在打印上显示 4098,而在 Linux 上它只显示 8。我不知道我必须如何解释这个,我唯一知道的是它似乎没有 32 兆字节的缓冲区,因此代码无法运行。

这篇文章真的很长,我希望你们中的一些人有勇气把它全部读到这里!我完全迷失在那里,所以如果有人对此有任何想法,请分享:D

感谢 Faisal,我的代码在这里:

服务器端:(计数是我的文件大小/1024)

while 1:
txt=self.s.recv(1024)
if txt == " ":
break
txt = self.cipher.decrypt(txt)
if countbis == count:
txt = txt.rstrip()
tfile.write(txt)
countbis+=1

客户端:

while 1:
txt= tfile.read(1024)
if not txt:
self.s.send(" ")
break
txt += ' ' * (-len(txt) % 16)
txt = self.cipher.encrypt(txt)
self.s.send(txt)

提前致谢

诺兰

最佳答案

欢迎使用网络编程!您刚刚陷入了同样的错误假设,即 每个人 第一次假设客户端发送和服务器接收应该是对称的。不幸的是,这种情况并非如此。操作系统允许以任意大小的 block 进行接收。不过,解决起来相当容易,只需缓冲您的数据,直到您读取的数据量等于您希望接收的数据量。类似这样的东西可以解决问题:

buff=''
while len(buff) < 1024:
buff += s.recv( 1024 - len(buff) )

关于python - TCP 套接字文件传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3189844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com