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