python学习day35笔记

socket抽象层

socket,又称为套接字
socket是在应用层(用户)和传输层(tcp、udp)之间的一个抽象层
socket把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用
把socket当做一个函数,不考虑它如何实现,只需要知道如何操作

服务端

为客户端提供服务,同时只能服务一个客户端
server -> 服务端
c/s -> client(客户端)
b/s -> browser(浏览器)

服务端代码一

import socket
server = socket.socket()
# 第一个socket是模块名,第二个socket是类名,类名()实例化产生对象
# socket类可以传入参数family、type
# family = socket.AF_INET
# type = socket.SOCK_STREAM -> tcp协议
server.bind(('127.0.0.1',8080))
# bind必须传入一个参数,用于绑定监听的地址,也是用户访问的地址
server.listen(5)
# listen监听,半连接池,里面是客户端排队与服务端进行连接的最大数量,强调:并不是同时服务5个
sock,addr = server.accept()
# accept接受信息,sock、addr是accept返回值
# sock指当前连接对象,addr指客户端的地址->ip+port
print(sock)
print(addr)
data = sock.recv(1024)
# recv接收,1024是一次最多接收的字节数
sock.send(data.upper())
# send发送,将客户端发送的字节数据大写后回应给客户端
sock.close()
# 关闭当前对象的连接
server.close()
# 关闭服务端连接

服务端代码二,加入链接循环

import socket
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)

while True:
    sock,addr = server.accept()
    print(sock)
    print(addr)
    
    while True:
        try:
            data = sock.recv(1024)
            print(data)
            if len(data) == 0:
                break
            sock.send(data.upper())
        except Exception as e:
            print(e)
            break
        
    sock.close()

server.close()

服务端代码,udp协议

import socket
server = socket.socket(type=socket.SOCK_DGRAM)
# SOCK_DGRAM -> udp服务端
# SOCK_STREAM -> tcp服务端
server.bind(('127.0.0.1',8080))
while True:
    data, client_addr = server.recvfrom(1024)
    # client_addr:客户端地址
    print(data)
    print(client_addr)
    server.sendto(data.upper(),client_addr)
server.close()

客户端

除了服务端之外的都叫客户端

客户端代码一

import socket

client = socket.socket()
# 调用socket类名实例化产生对象
client.connect(('127.0.0.1',8080))
# connect连接,括号内填入连接的地址
client.send(b'sb')
# sent发送数据,发送二进制的sb
data = client.recv(1024)
# 接收服务端返回的结果
client.close()
# 关闭客户端连接

客户端代码二,加入通信循环

import socket
client = socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    input_data = input('请输入要传输的数据:(q to quit)').strip()
    if not input_data:continue
    if input_data == 'q':
        break
    client.send(input_data.encode('utf-8'))
    input_data = client.recv(1024)
    print(input_data)
    
client.close()

客户端代码,udp协议

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input('>>:').strip()
    client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
    data, server_addr = client.recvfrom(1024)
    # 接收服务端返回的数据
    # data -> 数据,server_addr -> 服务端地址
    print(data)

client.close()

流程

服务端:
socket()  # 调用socket得到一个socket对象
bind()  # 绑定ip获得一个端口
listen()  # 监听客户端
accept()  # 接受客户端发起请求,如果没请求则阻塞直到客户端连接
read()  # 读取用户发送的数据
write()  # 回应数据同时返回read继续接受数据
read()  # 读取到客户端结束连接
close()  # 结束连接

客户端:
socket()  # 调用socket得到一个socket对象
connect()  # 对服务端发起连接后建立连接
write()  # 对服务端发送数据
read()  # 接受服务端回应的数据同时返回write继续发送数据
close()  # 结束连接

http协议

浏览器中有http协议
http是处于tcp、udp协议之上的应用层协议

进程的概念

进程是系统进行资源分配和调度的基本单位
进程是线程的容器
进程是正在运行的程序的实例,进程是动态的
进程不是实际干活的人,真正干活的是线程

程序和进程

程序是静态的,没有生命周期
进程是动态的,是程序在处理机上的一次执行过程,有生命周期
同一个程序执行两次,就会在操作系统中出现两个进程,所以我们可以同时运行一个软件,分别做不同的事情也不会混乱

进程调度

先来先服务调度算法
短作业优先调度算法
时间片轮转法
多级反馈队列

阻塞

i/o密集型

io阻塞
i:input
o:output

计算密集型

进程的三种状态

就绪态
运行态
阻塞态

线程

线程是操作系统执行的最小单位

协程

解决单线程下的并发问题
协程是用户态(程序员)下的线程

常用端口号

1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098

2.SOCKS代理协议服务器常用端口号:1080

3.FTP(文件传输)协议代理服务器常用端口号:21,20

4.Telnet(远程登录)协议代理服务器常用端口号:23

5.HTTP服务器,默认端口号为80/tcp(木马Executor开放此端口)

6.HTTPS(securely transferring web pages)服务器,默认端口号为443/tcp  443/udp

7.Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口)

8.FTP,默认的端口号为21/tcp(木马Doly *、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口)

9.TFTP(Trivial File Transfer Protocol),默认端口号为69/udp

10.SSH(安全登录)、SCP(文件传输)、端口号重定向,默认的端口号为22/tcp

11.SMTP Simple Mail Transfer Protocol(E-mail),默认端口号为25/tcp(木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口)

12.POP3 Post Office Protocol(E-mail),默认端口号为110/tcp

13.Webshpere应用程序,默认端口号为9080

14.webshpere管理工具,默认端口号9090

15.JBOSS,默认端口号为8080

16.TOMCAT,默认端口号为8080

17.WIN2003远程登录,默认端口号为3389

18.Symantec AV/Filter for MSE,默认端口号为 8081

19.Oracle 数据库,默认的端口号为1521

20.ORACLE EMCTL,默认的端口号为1158

21.Oracle XDB(XML 数据库),默认的端口号为8080

22.Oracle XDB FTP服务,默认的端口号为2100

23.MS SQL*SERVER数据库server,默认的端口号为1433/tcp 1433/udp

24.MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp

25.Kibana 配置项,server.port:默认的端口号为5601
    
26.DNS 53/udp

27.MYSQL 3306/tcp
上一篇:day35 MySQL语句


下一篇:小渣渣学习笔记 python day35【线程 进程 锁 生产者消费者总结 池 】