常识:
裸机:没有安装操作系统的计算机。
如果想在裸机上运行自己所编写的程序,就必须用机器语言写程序。
桌面操作系统:windows、macOS、Linux
服务器操作系统:Linux、Windows Server
嵌入式操作系统:Linux
移动设备操作系统:IOS、android(基于Linux)
虚拟机Virtual Machine:通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。
Linux主要目录速查表
/:根目录,一般根目录只存放目录
/bin、/usr/bin:可执行二进制文件存放的目录,如常用的命令ls、tar、mv、cat等
/boot:放置linux系统启动时用到的一些文件,如linux的内核kernel文件:/boot/vmlinuz,
ip本身是个协议;ip地址:用来在网络中标记一台电脑,不允许重复。
windows查看ip:ipconfig;ubuntu查看ip:ifconfig
ip地址包括两部分:网络地址和ip地址。我们一般前面三个字节来表示网络地址,后面一个字节代表主机地址。
单播、多播、广播,单播向多个人传数据,多播向多个人传数据,广播向很多人传数据。
网络号在同一网段的不同主机号的电脑可以通信。
百度输入ip可以直接查看自己的外网ip。
网络通信三要素:协议、ip、port
端口port dest_port destination port
dest_ip src_ip src_port
netstat -an 查看端口
80端口分配给http服务,万维网服务
21端口分配给ftp服务,文件传输服务
动态端口范围1024~65535,知名端口0——1023
连接之前可以ping一下ip
在一台电脑上可以通过pid唯一标识一个进程,但在网络中需要通过协议、ip、port来唯一标识一个进程。ip唯一标识网络中的主机,而传输层的协议、port可以唯一标识主机中的应用程序。
链路层----网络层----传输层----应用层
进程:运行的程序以及运行时用到的资源(环境)这个整体称之为进程,在讲解多任务编程时会讲到;进程间通信:运行的程序之间的数据共享。
API应用程序编程接口
**************************************
socket套接字:是进程间痛心的一种方式。它能够实现在不同主机之间进行通信。
python中使用socket模块中的socket函数来创建套接字。
tcp面向连接、可靠、基于数据流的通信协议
udp接收到的是数组,(b'djfsajf', ('127.0.0.1', 56504)),前面一个字节码要解码成字符串
套接字使用流程:
udp_sendto:创建套接字;使用套接字发数据(转换为字节流);关闭套接字
b"fhsakfdjsa" str.encode("utf-8")
udp_recvfrom:创建套接字;绑定ip/port(默认为本地ip"");接收数据,以元组的形式,前面的是字节流的,解码为字符串recv[0].decode("utf-8");关闭端口
str->bytes:encode编码
bytes->str:decode解码
str.encode()
bytes.decode()
demo01_udp发数据包.py
from socket import *
def main():
# 创建套接字
udp_socket_sendto=socket(AF_INET,SOCK_DGRAM)
# 建立链接,udp无连接,
#udp_socket_sendto.
# 发送数据
udp_socket_sendto.sendto(b"shuzk1 sendto shuzk2",("",7890))
# 关闭套接字
udp_socket_sendto.close()
if __name__=="__main__":
main()
demo01_udp绑定端口接收数据.py
from socket import *
def main():
# 创建套接字
udp_socket_recvfrom=socket(AF_INET,SOCK_DGRAM)
# 绑定端口,是绑定本台计算机的端口,故ip为本地ip,也可以不写
udp_socket_recvfrom.bind(("",7890))
# 接收数据
recv=udp_socket_recvfrom.recvfrom(1024)
print(recv)
# 关闭套接字
udp_socket_recvfrom.close()
if __name__=="__main__":
main()
demo02_udp1_循环发送.py
from socket import *
def main():
# 创建套接字
udp_socket_sendto=socket(AF_INET,SOCK_DGRAM)
# 建立链接,udp无连接,
#udp_socket_sendto.
# 发送数据,循环发送
while True:
send_data=input("请输入要发送的数据:")
if "None"==send_data:
break
udp_socket_sendto.sendto(send_data.encode("utf-8"),("",7890))
# 关闭套接字
udp_socket_sendto.close()
if __name__=="__main__":
main()
demo02_udp2_保持接受状态.py
from socket import *
def main():
# 创建套接字
udp_socket_recvfrom=socket(AF_INET,SOCK_DGRAM)
# 绑定端口,是绑定本台计算机的端口,故ip为本地ip,也可以不写
udp_socket_recvfrom.bind(("",7890))
# 接收数据 循环接收
while True:
recv=udp_socket_recvfrom.recvfrom(1024)
if "exit"==recv:
break
print("***********************")
# 接受的是元组,前面的字符串要解码,根据传过来的编码格式
# 进行解码
print(recv[0].decode("utf-8"),"***",recv,"***",type(recv),"\n")
# 关闭套接字
udp_socket_recvfrom.close()
if __name__=="__main__":
main()
demo03_udp_发送接收.py
from socket import *
def send_msg(udp_socket):
msg_data=input("\n请输入要发送的数据:")
msg_ip=input("\n请输入接收方的ip地址:")
msg_port=input("\n请输入接收方应用程序的端口:")
# 端口号是int型
udp_socket.sendto(msg_data.encode("utf-8"),(msg_ip,int(msg_port)))
def recv_msg(udp_socket):
recv_msg=udp_socket.recvfrom(1024)
print(recv_msg[0].decode("utf-8"),"***",recv_msg[1])
print(recv_msg)
def main():
udp_socket=socket(AF_INET,SOCK_DGRAM)
udp_socket.bind(("",7890))
while True:
option_num=input("请输入操作序号:")
if "1"==option_num:
send_msg(udp_socket)
elif "2"==option_num:
recv_msg(udp_socket)
elif "exit"==option_num:
break
else:
print("输入有误")
if __name__=="__main__":
main()
*********************************************************************************************************
*********************************************************************************************************
*********************************************************************************************************
tcp协议,传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接:因此TCP不适用与广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输:tcp采用发送应答机制;超时重传;错误校验;流量控制和阻塞管理。
tcp流程:
服务器socket()----bind()----listen()----accept()-----read()----write()----close()
客户机socket()----connect()--------------------------write()----read()----close()
************************************************************************