码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程(五)

时间:2019-02-22 19:58:52      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:下载   上传   文件名   alt   print   自定义   add   col   sockets   

缓冲区的问题

recv的问题

解决粘包现象的高大上版

基于UDP协议的socket通信

SocketServer的源码解析

缓冲区的问题:

缓冲区的作用:暂存一些数据,防止网络卡顿,recv不到数据,不会影响recv的效率

recv的问题

技术图片
# 1.客户端send一次就关闭,服务端recv完数据才关闭
import socket
sk=socket.socket()
sk.bind((127.0.0.1,8888))
sk.listen()
conn,addr=sk.accept()
data1=conn.recv(2)
print(data1)
data2=conn.recv(2)
print(data2)
data3=conn.recv(1)
print(data3)
conn.close()
sk.close()
# 结果:
# b‘he‘
# b‘ll‘
# b‘o‘

# 2.客户端send完数据,不关闭,服务端recv完数据,在recv会阻塞
#
import socket
sk=socket.socket()
sk.bind((127.0.0.1,8888))
sk.listen()
conn,addr=sk.accept()
data1=conn.recv(5)
print(data1)
print(1111)
data2=conn.recv(2)
print(2222)
print(data2)
conn.close()
sk.close()
# 结果:
# b‘hello‘
# 1111运行完1111后程序会阻塞在recv
# 2222
# b‘‘

# 3.客户端send一次就关闭,服务端recv完数据,再次recv会接收b‘‘

import socket
sk=socket.socket()
sk.bind((127.0.0.1,8888))
sk.listen()
conn,addr=sk.accept()
data1=conn.recv(5)
print(data1)
data2=conn.recv(2)
print(data2)
conn.close()
sk.close()
# 结果:
# b‘hello‘
# b‘‘
server端
技术图片
# 1.
import socket
sk=socket.socket()
sk.connect((127.0.0.1,8888))
sk.send(bhello)
sk.close()
# 2
import socket
import time
sk=socket.socket()
sk.connect((127.0.0.1,8888))
sk.send(bhello)
time.sleep(5)
sk.close()
# 3.
import socket
sk=socket.socket()
sk.connect((127.0.0.1,8888))
sk.send(bhello)
sk.close()
client端

 

粘包现象low版low的原因:

1.如果数据长度过大,struct得到的字节会报错

2.如果上传下载一个文件(视频,音频,文字类文件)自定义一个报头:文件名,文件路径,文件大小,md5等等

 

粘包现象的高大上版代码:

 

 

基于UDP协议的socket通信

 

网络编程(五)

标签:下载   上传   文件名   alt   print   自定义   add   col   sockets   

原文地址:https://www.cnblogs.com/liuer-mihou/p/10420229.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!