网络
文章平均质量分 69
卓耿Drogon
醉舞经阁半卷书,坐井说天阔
展开
-
p2p双向传输300M的文件 开发心得(Python windows)
最近写了p2p的文件传输软件,300M的文件只需1.5秒左右即可完成传输。期间遇到了一些问题,这里总结一下开发心得。1、多线程编程调用消息发送队列时,需要加锁,保证整块数据内部不会插入其它数据。参考之前的文章:socket send recv使用心得。再向发送队列添加数据时,需要容错处理,因为取队列的速度可能会低于加的速度导致加失败。2、接收线程在处理数据时,需要根据数据头分块处理,每次recv(buff)获取的未必是一包可处理的处理,可能是半包或者超过一包。3、根据要传送的文件大小,动态修改发送和接原创 2022-03-04 14:38:59 · 1196 阅读 · 2 评论 -
socket send recv使用心得(Python windows)
最近使用python socket做了一些程序,遇到了一些问题,后来逐一解决了。这里结合之前的认知,总结以下心得,避免后来人踩坑。1、send和sendall的区别发送方使用sendall,不要使用send。sendall在返回的时候,会确保数据已传给tcpip;send并不一定会把数据全部发完,而是发一次,就返回发送的数据长度。在一般的程序设计中,我们更多场景是使用sendall,使用send就需要自己处理未发送的数据。2、recv是拷贝数据,不是接收数据,每次拷贝多少?recv并不是取完对方发送原创 2021-10-27 14:49:58 · 2318 阅读 · 1 评论 -
数据发一半,网络就异常了,应用层能收到一些数据吗?
数据发一半,网络就异常了,应用层能收到一些数据吗?我认为,应用层不一定能收到。如果传输层采用的是UDP,UDP是不分包,不组包,不重传的。UDP收到应用的发送请求,直接将数据包加上UDP头后,丢给IP层。IP层是会分片,组片。IP层根据MTU将数据分片传送,IP层也不重发。接收方收到IP片后,在IP层进行组片,如果组成功,就丢给传输层;如果组失败,就丢弃这个垃圾包。所以在UDP传输下,如果UDP丢给IP层的数据很大,分片后,传输一半网络异常后,接收方的IP层就会把收到的一片片丢弃,导致传输层收不到数据,原创 2021-12-01 19:24:37 · 2262 阅读 · 2 评论