day19 网络编程和多线程

1. 服务器

1.1 什么是socket

socket又叫套接字, 指的是网络通信的两端,分别是服务器和客户端
socket编程指的就是通过代码实现客户端和服务器之间的通信

1.2 服务器的实现

1.2.1 创建套接字对象

family: ip类型, AF_INET -> ipv4, AF_INET6 -> ipv6
type: 传输协议的类型, SOCK_STREAM -> TCP, SOCK_DGRAM -> UDP
server = socket.socket()

1.2.2 绑定IP地址和端口

**ip用来区分互联网上设备
端口是用来区分一台计算上的不同的服务(应用),值是0-65535,其中0-1024是著名端口。其他的随便选

bind((ip地址,端口号))**

server.bind(('10.7.190.127', 8081))

1.2.3 启动服务器(监听请求)

listen(数量) - 这儿的数量指的是一次性能够处理的最大请求数

server.listen(255)

1.2.4 让服务器一直处于运行状态

while True:
    print('开始监听....')

1.2.5 等待客户端的请求

    #程序运行到这个地方,会停下来,等到有客户端来连接服务器,才会接着往后执行
    connect, addr = server.accept()
    print(connect, addr)

1.2.6 发送消息

send(数据) - 发送数据,数据是二进制数据

    message = input('>>>')
    connect.send(message.encode(encoding='utf-8'))

1.2.7 接收消息

recv(字节数) - 接收数据,并且指定一次性接收的数据的大小的最大值;返回接收到的二进制数据

    # 程序运行到这个地方会停下来,直到客户端给服务器发送消息,才会接着执行
    data = connect.recv(1024)
    print('<<<:')
    print(data.decode(encoding='utf-8'))

1.2.8 关闭连接

    connect.close()

2. 客户端

创建客户端套接字

2.1 创建套接字对象

client = socket.socket()

2.2 连接服务器

connect((ip地址, 端口))
client.connect(('10.7.190.127', 8080))

2.3 接收消息

data = client.recv(1024)
print('<<<:')
print(data.decode(encoding='utf-8'))

2.4 发送消息

message = input('>>>:')
client.send(message.encode(encoding='utf-8'))

2.5 关闭连接

client.close()

3. 多线程

import threading
from datetime import datetime, date, time
from time import sleep

3.1 什么是进程

一个正在运行的应用程序就是一个进程。系统会给每个进程分配一个独立的内存区域,用来保存程序运行过程中产生的数据,
当进程结束的时候,这个内存区域会自动销毁

3.2 什么是线程

进程想要执行任务,就必须要有线程。每个进程默认都有一个线程,这个线程叫主线程;其他的线程叫子线程
程序默认都是在主线程中执行的
一个线程中执行多个任务,任务是串行执行的(一个一个的按顺序执行)
一个进程中如果有多个线程,多线程执行不同任务的时候是并行(同时执行)

3.3 python中怎么使用多线程

python通过内置的threading模块来提供多线程相关技术;
其中有一个Thread类,这个类的对象就是线程对象

def download(film):

    print('开始下载: %s  time: %s' % (film, str(datetime.now())))

    sleep(15)
    print('%s下载完成  time:%s' % (film, str(datetime.now())))
    print(threading.current_thread())

# 在主线程中下载两个电影: 一个一个的下载,一个下载完才下载另一个,总耗时两个电影耗时之和
# download('恋恋笔记本')
# download('摔跤吧爸爸')

3.4 直接创建线程类的对象

a.语法:
线程对象 = Thread(target=函数, args=参数) - 创建一个线程对象,并且返回。
b.说明
函数 - function类型的变量; 这个函数的函数体就会在子线程中执行
参数 - 元祖; 参数会传给target对应的函数

t1 = threading.Thread(target=download, args=('大国崛起',))
t2 = threading.Thread(target=download, args=('霸王别姬',))

3.5 让线程开始执行任务

线程对象.start() - 开始执行子线程中的任务

t1.start()
t2.start()
download('变形金刚')
print('=======')
# 某个线程出现异常,是线程直接结束;进程不一定结束,所有的线程都结束,进程才会结束
print([1, 2][10])
print('+++++++++++')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,097评论 0 6
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,819评论 0 10
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,629评论 1 118
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 815评论 0 0
  • 01 陈一回头看我的时候,我捂着嘴巴掐得吴优哇哇乱叫,我在桌底踹她一脚说“你别叫啊,把他吓跑了你负责啊?”吴优翻着...
    Five的叮当猫阅读 497评论 0 2