当前位置: 首页 > news >正文

零基础学Python之网络编程

1.什么是socket

官方定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

2.socket()函数

socket.socket([family[, type[, proto]]])
  • family: 套接字家族可以使 AF_UNIX 或者 AF_INET。
  • type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAMSOCK_DGRAM
  • protocol: 一般不填默认为 0。
AF_INET需经过多个协议层的编解码,消耗系统cpu,并且数据传输需要经过网卡,受到网卡带宽的限制。AF_UNIX数据到达内核缓冲区后,由内核根据指定路径名找到接收方socket对应的内核缓冲区,直接将数据拷贝过去,不经过协议层编解码,节省系统cpu,并且不经过网卡,因此不受网卡带宽的限制。AF_UNIX的传输速率远远大于AF_INETAF_INET不仅可以用作本机的跨进程通信,同样的可以用于不同机器之间的通信,其就是为了在不同机器之间进行网络互联传递数据而生。而AF_UNIX则只能用于本机内进程之间的通信。

3.UDP实现客户端与服务端通信

  • UDFClient
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
client.sendto("This is client hello".encode("utf-8"),("127.0.0.1",8888))
data,server = client.recvfrom(1024)
print(data.decode("utf-8"))
client.close()
  • UDFServer
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind(("127.0.0.1",8888))
print("UDF Server Started")
while True:data,client = server.recvfrom(1024)print("Receive client messages:",data.decode("utf-8"))server.sendto("This is server hello".encode("utf-8"),client)

运行效果:
在这里插入图片描述

4.TCP实现客户端与服务端通信

  • TCPClient
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8080))
while True:print("请输入发送服务端的内容:")send_data = input()client.send(send_data.encode("utf-8"))if send_data == "close":client.close()print("客户端关闭...")breakdata = client.recv(1024).decode("utf-8")print("服务端响应的数据:",data)
  • TCPServer
import socketserver = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("127.0.0.1",8080))
# 同一时刻,允许多少客户端进行通信
server.listen(5)
client,address = server.accept()
print("服务端启动...")
while True:data = client.recv(1024)msg = data.decode("utf-8")if msg == "close":print("服务端关闭...")server.close()breakprint("客户端发送的内容:", msg)print("请输入回复内容:")client.send(input().encode("utf-8"))

运行效果:

在这里插入图片描述

5.requests模块发送http请求

  • requests模块常用方法:
方法名描述
requests.request(url)构造一个请求,支持以下各种方法
requests.get()发送一个Get请求
requests.post()发送一个post请求
requests.head()获取html请求头信息
requests.put()发送put请求
requests.patch()提交局部修改的请求
requests.delete()提交删除请求
  • 属性及方法
属性描述
response.status_code响应状态码
response.content将response对象转成二进制数据
response.text把response对象转换成为字符串数据
response.encoding定义response对象的编码
response.cookie获取请求后的cookie
response.url获取请求的地址
response.json()内置的JSON解码器
  • 使用requests模块发送一个带参数的get请求
url = "http://192.168.140.123:9090/product/list?type=rate"
headers = {"token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyNTYyODM4MzI1NDMzNDI1OTIiLCJzdWIiOiIxIiwiaWF0IjoxNzA2MTY3Njc3LCJleHAiOjE3MDY3NzI0Nzd9.CB0YpMwQRxGKqqeUj29D0TiFgUO7YDOx04t2-ocfTdo"
}
response = requests.get(url=url, headers=headers)
print(response.text)
  • 使用requests模块发送一个带参数的post请求
url = "http://192.168.140.123:9090/product/page"
params = {"current": 1,"size": 15
}
headers = {"token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyNTYyODM4MzI1NDMzNDI1OTIiLCJzdWIiOiIxIiwiaWF0IjoxNzA2MTY3Njc3LCJleHAiOjE3MDY3NzI0Nzd9.CB0YpMwQRxGKqqeUj29D0TiFgUO7YDOx04t2-ocfTdo","Content-Type": "application/json"
}
response = requests.post(url=url, headers=headers, data=json.dumps(params))
print(response.text)

在这里插入图片描述

相关文章:

  • 【Linux】缓冲区与缓冲区的刷新策略
  • 微信自动预约小程序开发指南:从小白到专家
  • 中兴R5300G4服务器查看服务器、主板序列号及硬盘RAID信息
  • 小白都能看懂的力扣算法详解——链表(一)
  • Linux文件和目录管理
  • 上海亚商投顾:成交量突破万亿 沪指重回2800
  • C++中的class
  • Golang 基础 环境配置和包管理
  • PyTorch深度学习实战(23)——从零开始实现SSD目标检测
  • Nacos安装,服务注册,负载均衡配置,权重配置以及环境隔离
  • 【Python基础】案例分析:电影分析
  • 飞天使-k8s知识点16-kubernetes实操1-pod
  • Leetcode 213 打家劫舍 II
  • 2024.2.7日总结(小程序开发4)
  • 自然语言NLP
  • 分享的文章《人生如棋》
  • 2018一半小结一波
  • Android 架构优化~MVP 架构改造
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • express如何解决request entity too large问题
  • github指令
  • HTML中设置input等文本框为不可操作
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java读取Properties文件的六种方法
  • JS变量作用域
  • JS字符串转数字方法总结
  • leetcode-27. Remove Element
  • node入门
  • Promise初体验
  • 包装类对象
  • 初探 Vue 生命周期和钩子函数
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何使用 JavaScript 解析 URL
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用SAX解析XML
  • 树莓派 - 使用须知
  • 我是如何设计 Upload 上传组件的
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 运行时添加log4j2的appender
  • 容器镜像
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.proxy和$.extend
  • (day6) 319. 灯泡开关
  • (function(){})()的分步解析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计大学生兼职系统
  • (四)图像的%2线性拉伸
  • (转载)Linux网络编程入门
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)