python写tcp传输程序_python – TCP套接字文件传输

我正在尝试使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值