网络编程
一、socket
1. 什么是socket编程
socket又叫套接字,指的是实现通信的两个端
这两个端有分为服务器套接字和客户端套接字
2. 服务器套接字
python中提供了一个socket模块来支持socket编程
1) 创建套接字对象
socket(family=AF_INET,type=SOCK_STREAM)
family
: 设置ip类型AF_INET : ipv4
AF_INET6 : ipv6
type
: 设置数据的传输方式SOCK_STREAM : TCP
SOCK_DGRAM : UDP
server = socket.socket()
2)绑定ip和端口
bind((ip地址, 端口号))
ip地址
: 字符串(服务器程序运行的计算机ip)
端口号
: 整型(范围是065535,其中01024是有特殊作用的著名端口,一般不使用)
server.bind(('10.7.181.116', 8888))
3) 等待连接
listen(backlog: int)
backlog
: 设置统一时间能够接收的请求数量
server.listen(512)
4) 让服务器保持一致运行的状态
5) 接收请求
注意
:当程序执行到accept()时会阻塞线程,直到有客户端给当前服务器发送请求为止
while True:
print('开始监听')
connect, address = server.accept()
print('接收到请求')
print(connect, address)
6) 接收客户端发送的数据
recv(数据大小) : 接收数据并且设置一次性能够接收的最大数据大小
补充
:二进制转字符串
二进制对象.decode(encoding='utf-8')
str(二进制对象, encoding='utf-8')
recv_data = connect.recv(1024)
# print('接收:', recv_data.decode(encoding='utf-8'))
print('接收:', str(recv_data, encoding='utf-8'))
7) 给客户端发送数据
send(数据) : 发送数据的类型必须是bytes
connect.send('HTTP/1.1 200 OK\r\n\r\n hello socket'.encode())
8) 关闭连接
connect.close()
3. 客户端套接字
1)创建客户端对象
client = socket.socket()
2) 发送请求
connect((ip地址, 端口号))
client.connect(('10.7.181.116', 8888))
3) 发送消息
message = input('客户端:')
client.send(message.encode())
4) 接收消息
re_data = client.recv(1024)
print('客户端接收:', re_data.decode(encoding='utf-8'))
5) 关闭连接
client.close()