Python-day-17

一、socketServer

socket编程(套接字):指的就是通过代码来创建实现通信的两个端(服务器和客户端) socket一般可以基于TCP 和UDP实现客户端和服务器之间的可靠传输和不可靠传输python中的内置模块socket可以支持socket编程 """ import socket# 通过socket实现服务器端if __name__ == '__main__': # 1.创建服务器套接字对象 """ family:确定服务类型 AF_INET --->ipv4 AF_INRT6--->ipv6type:确定传输协议类型 SOCK_STREAM -->TCP协议 SOCK_DGRAM --->UDP协议 """ # server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) server = socket.socket()# 2.绑定ip地址和端口 """ 地址格式:(ip地址字符串,端口号) 端口号是用来区分一个计算机中不同的服务,范围是0-65535; 注意:1.其中0-1024是'著名端口’用来绑定一些特殊的服务的,一般使用。 2.同一时间一个端口只能绑定一个服务 """ server.bind(('10.7.181.58',4564))# 3.监听 """ 参数:用来限制一次性能够接收的客户端请求数量, """ server.listen(50) print('开始监听请求') # 保证服务器处于一直启动的状态 while True : # 4.接收客户端的请求 """ accept()会阻塞线程,到有客户端给这个服务器发送请求,才会开始执行 """ client,addr = server.accept() print('====') print(addr) # 5.给客户端发送消息 """ send(数据):数据必须是二进制数据(bytes)类型字符串转二进制: bytes(字符串,encoding=编码方式) 字符串.encode(encoding=编码方式) """ client.send('HTTP/1.1 200 OK\r\n\r\n'.encode(encoding='utf-8')) client.send(bytes('你好吗',encoding='utf-8')) client.send('我很好'.encode())# 接收从客户端发来的消息 """ bufsize:设置缓存大小(单位是字符) 1024字节 --->1k 1024k --->1M 1024M --->1G 1024G --->1T 1024T --->1P二进制(bytes)转换字符串: a.str(二进制数据,encoding='utf-8') b.二进制数据.decode(encoding='utf-8') """ data = https://www.it610.com/article/client.recv(1024) str1 = str(data,encoding='utf-8') str2 = data.decode(encoding='utf-8') # 6.关闭连接 client.close()

二、socketClient
""" by_sawyer """ import socket if __name__ == '__main__': # 1.创建套接字对象 client = socket.socket()# 2.连接服务器 client.connect(('10.7.181.58',4564))# 3.接收信息 data = https://www.it610.com/article/client.recv(1024) print('接收到服务器数据',data.decode(encoding='utf-8'))# 4.发送信息 client.send('hhhh'.encode(encoding='utf-8'))

三、server
""" by_sawyer """ import socket if __name__ == '__main__': # 1.创建对象 server = socket.socket()# 2.绑定地址 server.bind(('10.7.181.58',1311))# 3.监听 server.listen(50) # 保持服务器不关闭 while True: conversation,addr = server.accept()# 让客户端和服务器一直处于连接状态 while True: massage = input('>>>') conversation.send(massage.encode())# 接收消息 massage_data = https://www.it610.com/article/conversation.recv(1024) print(massage_data.decode(encoding='utf-8'))

四、client
""" by_sawyer """ import socket if __name__ == '__main__': # 创建套接字对象 client = socket.socket()# 连接服务器 client.connect(('10.7.181.58',1211))# 监听 while True: data = https://www.it610.com/article/client.recv(1024) print(data.decode(encoding='utf-8'))massage = input('>>>') client.send(massage.encode())

五、imageServer
"""__author__ = 余婷""" import socketif __name__ == '__main__': server = socket.socket() server.bind(('10.7.181.117', 8081)) server.listen(10)while True: conversation, addr = server.accept() print(addr)# 发送一张图片 with open('./luffy2.png', 'rb') as f: data = https://www.it610.com/article/f.read() conversation.send(data)conversation.close()

六、imageClient
"""__author__ = 余婷""" import socketif __name__ == '__main__': client = socket.socket() client.connect(('10.7.181.117', 8081))# 接收数据,因为图片数据较大,可能会分多次发送 image_data = bytes()# 创建一个空的bytes用来保存整个图片数据 data = client.recv(1024) while data: image_data += data data = client.recv(1024)# 保存图片到本地 with open('./image.png', 'wb') as f: f.write(image_data)client.close()

七、Http
"""__author__ = 余婷""" """ 服务器:(python)\java\php等等HTTP(为了可以让客户端和服务器能够进行有效的数据交流)客户端:网页(js)、iOS设备上的软件(OC/Swift)、安卓设备上的软件(java) """""" python中访问网络中的数据:第三方库requests """ from requests import requestif __name__ == '__main__': # https: // www.apiopen.top / satinApi?type = 1 & page = 1 # GET请求:参数以?号的形式拼接到url地址后面,参数名=值的形式,多个参数用&隔开 # 1.确定url url = 'https://www.apiopen.top/satinApi?type=1&page=1'# 2.发送请求 """ request(请求方式,请求地址) 返回值:响应 """ response = request('GET', url) print(type(response), response)# 1.以字符串的形式获取响应体(服务器返回的数据) text = response.text print(type(text), text)# 2.以json的形式获取响应体 json = response.json() print(type(json),json)# 3.以二进制的形式获取响应体 content = response.content print(type(content), content)

    推荐阅读