一、网络基础
学习网络编程,了解一些网络基础的知识是必不可少的,下面学习一些基础的网络知识:
1、我们的电脑里有网卡,网卡里有mac地址;
2、我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。
IP: 192.168.13.84
IPv4
00000000.00000000.00000000.00000000
0~255 0~255 0~255 0~255
IPv6
00000000.00000000.00000000.00000000.00000000.00000000
子网掩码:255.255.255.0
网关IP:192.168.13.1
局域网内、城域网、广域网:
广播
单播
广播风暴
arp协议
3、DNS
网络连接:
- 域名解析
www.baidu.com 220.181.57.216
- 连接
sk = socket.socket()
sk.connect(('47.95.64.113',80))
...
问题来了,域名和IP的对应关系在哪里?
本地:
Win本地电脑:
C:WindowsSystem32driversetchosts
11.22.33.44 www.baidu.com
Linux/Mac电脑:
/etc/hosts
DNS服务器:全球顶级DNS服务器13台
www.luffycity.com 47.95.64.113
创业: a. 租一个服务器+公网IP
b. 租域名
域名+IP解析
总结:
1. DHCP,自动位局域网内容电脑分配IP。
2. 网关,路由器中连接交换机的口。
3. IP,4个点分的十进制表示 192.11.111.11
4. 子网掩码,
IP: 192.168.13.99
掩码:255.255.255.0
将挡住的IP位数作为网段。
未挡住的部分作为可变的值。
5. 局域网/城域网/广域网
6. arp协议
7. DNS
二、多线程
线程,英文是Thread,每个正在系统上运行的程度都是一个进程。每个进程包含一到多个线程。线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。下面就是一个多线程的示例:
import time
import threading
def task(a1,a2,a3):
time.sleep(2)
print('去拿快递')
def work():
print('去写作业')
def wm():
print('去拿外卖')
# 创建一个线程 让该线程去执行任务:函数
t1 = threading.Thread(target=task,args=(1,2,3,))
t1.start() # 去执行吧
# 创建一个线程 让该线程去执行任务:函数
t2 = threading.Thread(target=work)
t2.start() # 去执行吧
# 创建一个线程 让该线程去执行任务:函数
t3 = threading.Thread(target=wm)
t3.start() # 去执行吧
print('玩扇子')
print('煽风点火')
print('耍贱...')
# 分析:该程序创建了三个线程,分别去执行不同的任务(函数),主线程可以继续向下走。
再看下面socket和线程配合的示例:
import time
import socket
import threading
def task(conn):
time.sleep(2)
data = conn.recv(1024)
print(data)
conn.close()
server = socket.socket()
server.bind(('127.0.0.1',8001,))
server.listen(5)
while True:
conn,addr = server.accept()
t = threading.Thread(target=task,args=(conn,))
t.start()