网络编程
socket
- 网络编程就是socket编程,socket就是套接字,就是进行数据通信的两端(服务器和客户端)
- python对socket编程的支持:
socket库
socket相关函数
-
socket(family=AF_INET,type=SOCK_STREAM,protocal=0)
创建套接字对象
family:确定ip协议类型
AF_INET - ipv4 /AF_INET6 - ipv6/
type:传输协议类型
SOCK_STREAM - TCP协议/SOCK_DGRAM UDP协议/
protocal:一般不填默认为0
-
bind((ip地址,端口))
- 绑定IP地址和端口到套接字
bind((服务器ip地址,端口))
端口: 一台电脑上一个端口标记一个唯一的服务。总共65535个端口,0-1024位特殊端口。
注意: 同一个端口同一时间只能绑定一个服务。
-
listen(客户端最大连接数)
TCP监听 -
accept()
- 被动接受TCP客户端连接,等待连接的到来,返回连接对象和客户端地址 -
connect((服务器ip地址,端口号))
- 主动与tcp服务器连接 -
recv(bufsize)
- (阻塞)接受tcp数据, bufsize为接受的最大数据量
, 返回字符串 -
send(二进制数据)
- 发送tcp数据 -
close()
- 关闭套接字对象
字符串转bytes
- 字符串.encode()
- bytes(字符串,编码方式)
- b'由ASCII码组成的字符串'
bytes转字符串
- 二进制数据.decode()
- str(二进制数据,编码方式)
如何接受图片数据
from socket import socket
def create_img_client():
fd_client = socket()
# fd_client.settimeout(2)
fd_client.connect(('10.7.153.196',1500))
# 创建空的二进制数据
all_img = bytes()
data = fd_client.recv(1024)
count = 0
while data:
all_img += data
count += 1
data = fd_client.recv(1024)
print('记录', count)
print('somthing')
with open('./files/7.jpg', 'wb') as f:
f.write(all_img)
if __name__ == '__main__':
create_img_client()
注: 先创建空的二进制数据,在将每次接受的数据利用+运算符,得到完整的图片bytes数据。
HTTP请求
- python中没有自带的request模块,需要导入第三方库
requests
-
requests.get(url)
返回服务器的响应 -
requests响应.text
获取字符串类型的数据 -
requests响应.json()
获取json类型的数据 -
requests响应.content
获取二进制类型的数据 -
requests响应.headers
获取响应头