网络编程知识点小结
目录
c/s:客户端和服务器
b/s:浏览器和服务器,本质上还是客户端和服务器
TCP:基于数据流的可靠协议(三次握手、四次挥手)
UDP:基于数据报的不可靠协议
在传输层和应用层之间的一层抽象层,可以操作网络层和传输层
为字节流加上固定的报头,报头中含有字节流的长度,一次send到对端,对端在接收时,先从缓存中取出定长的报头,然后再取真实数据。
struct()模块,将数据长度打包为四个int型的字节
把报头做成字典,字典里面包含将要发送的真实数据的信息,,然后json序列化,然后用struck将序列化后的数据长度打包成4个字节,一同send到对端
发送时:
先发报头长度
再编码报头内容然后发送
最后发真实内容
接收时:
先手报头长度,用struct取出来
根据取出的长度收取报头内容,然后解码,反序列化
从反序列化的结果中取出待取数据的详细信息,然后去取真实的数据内容
用udp实现简单通信
#服务器
import socket
soc= socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #socket.SOCK_DGRAM是UDP协议
soc.bind(('127.0.0.1',8080)) #绑定地址和端口号
while True: #通信循环
data,addr = soc.recvfrom(1024) #无需等待接收和监听
print(data)
soc.sendto(data.upper(),addr) #将处理好的数据发送给客户端
#客户端
import socket
soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #实例化一个对象
while True: #通信循环
msg= input('请输入数据>>>').strip()
msg = msg.encode('utf8') #将数据转化为bytes格式
soc.sendto(msg,('127.0.0.1',8080))
data = soc.recvfrom(1024) #接收数据
print(data[0]) #打印数
udp的特点:
可以发送空内容
不需要建立连接
客户端和服务端谁断开都不影响发送
不会粘包
1) socketserver模块实现TCP简单通信
服务端
* 导入模块
* 定义一个类
* 类中必须重新handle方法
* handle里面写一些简单的逻辑
* `if __name__ == '__main__':`
* 实例化一个socketserver对象:`soc= socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyTcp)`
* `soc.serve_forever() `
客户端:用socket模块就行
2)socketserver模块实现UDP简单通信
书写步骤同上
优质内容筛选与推荐>>