我正在尝试使用Python和AES编写一个安全的传输文件程序,我有一个问题,我不完全理解.我发送我的文件通过解析1024字节块并发送它们但接收数据的服务器端崩溃(我使用AES CBC因此我的数据长度必须是16字节的倍数)并且我得到的错误说它是不.
我试图在客户端打印客户端发送的数据长度和服务器上收到的数据长度,并显示客户端每次都发送正好1024个字节,但是服务器端显示在某个时间点,接收的数据包不是,因此小于1024字节(例如743字节).
我试图在客户端的每个套接字发送之间放一个time.sleep(0.5),它似乎工作.是否可能是服务器端的某种套接字缓冲区故障?太多的数据被客户端发送得太快,并且它在某种程度上破坏了服务器端的套接字缓冲区,因此数据被破坏或消失,而recv(1024)只收到一个破碎的块?这是我唯一能想到的,但这也可能是完全错误的,如果有人知道为什么这不能正常工作会很好;)
按照我的想法,我试过:
self.s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 32768000)
print socket.SO_RCVBUF
我试图在服务器端放置32mbytes缓冲区,但在Windows XP上它在打印机上显示4098,在linux上它只显示8.我不知道我必须如何解释这一点,我唯一知道的是它似乎它没有32mbytes缓冲区,因此代码不起作用.
嗯,这是一个很长的帖子,我希望你们中的一些人有勇气把它全部读到这里!我完全迷失在那里如果有人对此有任何想法请分享:D
感谢费萨尔我的代码在这里:
服务器端:(计数是我的文件大小/ 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)
提前致谢,
Nolhian