Python重点难点知识
基础语法学习
日后慢慢补充
日后补充~~~思密达
基础网络通信学习
网络基础知识学习
什么叫网络
用户间能够进行数据共享
其中的重要概念
**Ip**:标识计算机在网络中的唯一位置
ip版本号分为ipv6,ipv4
范围 0 - 255 一共256种
实际有效的范围 1 - 254
局域网内的 IP 根据主机号的多少进行区分
这些叫私有IP
a类后三组为主机号 第一组为网络号 10.0.0.0~10.255.255.255
b类后2组为主机号 俩组为网络号 172.16.0.0-172.31.255.255
c类后一组为主机号 前三组为网络号 192.168.0.0-192.168.255.255
port:标识计算机程序在计算机中的程序
例如:一般的程序会在任务管理器中有pid,这是port -id的简写
再到cmd中 netstat - a找到相对应的端口号就好了
udp套接字学习
简介
网络通信协议的一种方式,且他的通信协议是全双工的
安全性低,但适合普通的局域网内互传信息
全双工:能够同时收发数据
半双工:能接收发送但是不能同一时刻
单工:只能接收数据
使用方法
# 创建套接字
# 可绑可不绑本地信息
# 完成接收发送功能
"""以上是基础思路"""
"""以下是案例"""
# udp聊天案例
import socket
def send_msg(udp_socket):
"""发送数据"""
# 形参 在当前函数所使用的参数
send_data = input("要发送的内容")
dest_ip = input("对方IP")
dest_port = int(input("对方端口"))
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收数据"""
recv_data = udp_socket.recvfrom(1024)
print("%s%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))
def main(): # 我是在这个函数定义的udp_socket 调用并发送send_msg(udp_socket)
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定信息
udp_socket.bind(("", 7788))
while True:
print("-----udp聊天器------")
print("--1 发送")
print("--2 接收")
print("--0 退出")
op = input("请输入功能")
if op == "1":
# 发送
# 获取要发送的内容
send_msg(udp_socket)
elif op == "2":
# 接收并显示
recv_msg(udp_socket)
elif op == "0":
break
else:
print("输入错误")
if __name__ == '__main__':
main()
小结
特性:简单,不安全
目的:局域网内简单的通信
这是我第一次写这些,还有些什么不合适的,
需要订正的,请各大博主点拨我下 谢谢~~~😘
Tcp学习
简介
TCP协议,传输控制协议(英语: Transmission Control Protocol,
缩写为TCP) 是一种面向连接的,可靠的基于字节流的传输层通信协议
由IETF的RFC 793定义
TCP通信需要经过 创建连接、数据传送、终止连接 三个步骤。
TCP通信模型中, 在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话""
具体流程
Tcp, 打电话的模型,需要建立相关的链接,比udp稳定,保证数据的可靠
采用了应答机制
a到b发信息
收到会告诉b收到数据
如果响应时间过程会重发
与udp模型的对比
Udp,发信的模型,不需要建立相关链接,不安全
Tcp, 打电话的模型,需要建立相关的链接,比udp稳定,保证数据的可靠
代码实现
此处为服务端的代码实现
步骤
1.创建套接字 注意此时是sock_stream,udp则是sock_DGRAM
2.绑定本地信息:bind函数
3.设置成监听(被动)套接字
4.等待客户端链接
5.接收并发送数据
"""此处为服务端的代码实现"""
import socket
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定本地信息 bind 本地ip127.0.0.1 注意绑定的时候这是元组
tcp_server_socket.bind(("", 7890))
# 转为被动套接字 listen
tcp_server_socket.listen(128)
# 循环目的:调用多次accept,从而为多个客户端服务
while True:
print("等待新的客户端连接")
# 等待连接accept 存储元组 发送过来的信息以及地址
new_client_socket, client_Addr = tcp_server_socket.accept()
# 循环目的:为一个客户端进行多次服务
while True:
# 分别打印值
client_data = new_client_socket.recv(1024)
print("客户端已经到来。。。%s" % str(client_Addr))
print("客户端发送的请求。。。%s" % client_data.decode("utf-8"))
# 如果client——data里面有值则返回
# 否则跳出最近的循环
if client_data:
# 返回给客户端的值
new_client_socket.send("success".encode("utf-8"))
else:
new_client_socket.close()
break
# 关闭当前套接字
print("已经服务完毕")
new_client_socket.close()
tcp_server_socket.close()
if __name__ == '__main__':
main()
此处为客户端代码的实现
步骤
1.创建套接字
2.链接服务器
3.发送或者接收数据
4.关闭套接字
import socket
def main():
# 创建tcp套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 链接服务器
sever_ip = input("需要连接的服务器ip")
server_port = int(input("需要连接的服务器端口号"))
sever_addr = (sever_ip, server_port)
tcp_socket.connect(sever_addr)
# 发送/接收数据
send_data = input("发送的数据")
tcp_socket.send(send_data.encode("utf-8"))
# 关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
深入的学习
三次握手,四次挥手
三次握手详细概述
目的:是为了双方准备好资源
客户端 |
---|
告诉服务端是否准备好资源了(并发送消息:是否准备好资源) |
发送(我接收到了你的消息,并问你那边是否准备好了资源 |
告诉服务端 并发送消息 (我这边也准备好了资源) |
四次挥手详细概述
目的:为了双方正确的释放资源
客户端 | 服务端 |
---|---|
告诉服务端我这里不接收值了 | 告诉客户端我这边接收到了 |
这时候到服务端给客户端发送数据了 | |
服务端 | 客户 |
List item
端 |
| 告诉客户端我这里要关闭链接了|告诉服务端我这边接收到了 |
扩展学习
为什么四次挥手中服务端的的告诉接收到了的流程
告诉关闭链接流程不一起呢?
解释:因为关闭链接不会一下子就关闭,还需要处理一些基础的数据
会造成客户端未能及时的接收到应答数据包,所以为了避免这种bug
就变成了四次挥手