网络编程

Posted liuer-mihou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

缓冲区的问题

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通信

 

以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?