Vim编辑器
i :进入插入模式, 光标前
I :行首
a :进入插入模式, 光标后
A:行末
w:存盘
wq: 存盘退出
q! :不存盘, 强制退出
esc: 命令模式
shift + ; 进入末行
替换操作
r: 替换当前字符
R: 替换当前行光标后的字符
查找字符
/: str查找
n:下一个
N:上一个
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LU2FLtO7-1578533592398)(en-resource://database/453:1)]
网络编程
ip地址:用来在网络中标记一台电脑
端口
1.引入
知名端口:
21 端口分配给ftp服务
22 端口分配给ssh服务
80 端口分配给http服务
动态端口:
动态端口的范围1024到65535
端口用来区分程序
socket简介
socket:进程(就是运行中的程序)间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 socket 来完成通信的例如: 我们每天浏览网页、QQ 聊天、收发 email 等等
tcp 是一种面向连接的
udp 是一种无需连接
1. UDP 网络程序-发送数据
协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)
# coding =utf-8
# 1.导包socket
import socket
#2 创建udp 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 3 准备接收方的地址
# "192.168.1.103" 表示 目的ip地址
# 8080 表示目的端口
dest_addr = ("192.168.1.103", 8080) # 注意是元组
# 4 定义发送的数据
send_data = input("请输入要发送的数据:")
# 5 发送数据到指定的电脑上的指定程序中
udp_socket.sendto(send_data.encode("gbk"), dest_addr)
# 6 关闭套接字
udp_socket.close()
1. UDP 网络程序-接收数据
#coding="utf-8"
import socket
# 1 创建套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2 绑定ip地址 和端口
udp_socket.bind(("192.168.15.130", 8080))
# 3 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
# 4 显示对方发送的数据
print(recv_data)
# 接收到的数据recv_data 是一个元祖
# 第1个元素是对方发送的数据
# 第2个元素是IP地址和端口
print(recv_data[0].decode("gbk"))
print(recv_data[1])
# 5 关闭套接字
udp_socket.close()
小总结
-
一个udp网络程序,可以不绑定,此时操作系统会随机进行分配一个端口,如果重新运行此程序端口可能会发生变化
-
一个udp网络程序,也可以绑定信息(ip地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是给此进程的
收发信息(low)
import socket
deff send_msg(udp_socket):
"""发送数据"""
send_data = input("请输入发生的数据")
dest_ip = imput("请输入对方的IP地址")
dest_port = imput("请输入对方的端口")
udp_socket.sendto(send_data.encode("utf_8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收数据"""
recv_msg = udp_socket.recvfrom(1024)
print("对方的数据:", recv_msg[0].decode("utf_8"))
print("对方的ip:", recv_msg[1])
def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定ip地址
udp_socket.bind(("192.168.1.103", 12000))
while True:
print("菜单")
print("1: 发送信息")
print("2: 接收信息")
print("*"*39)
num = input("请输入你的操作:")
if num == 1:
send_msg(udp_socket)
elif num == 2:
recv_msg(udp_socket)
else:
print("输入错误")
if __name__ == "main":
main()
广播小案例
飞秋消息格式
飞秋消息格式如下
# 版本号: 消息序号:用户名:电脑名:功能(32表示发送信息):发送的消息内容
# "1:123456789:白白:水果电脑:32:有时间么?"
代码部分
import socket
# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定 IP地址
s.bind("", 3466)
# 2 . 设置udp套接字允许其广播, 1 = True
s = setsocKetopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# <broadcast>会自动改为本局域网的广播ip
dest_info = ("<broadcast>", 2345)
dest_data = "1:123456789:白白:水果电脑:32:有时间么?"
# 发送广播数据
s.sendto(send_data.encode("gbk"), dest_info)
# 4 关闭 套接字
s.close()
网络编程 Tcp
1.区别
使用UDP发送数据容易丢失,而TCP能够保证数据稳定传送,所以更多时候用的是TCP,例如浏览器底层实现就是用的TCP