day19-socket,threading

套接字 - socket

需要模块socket

1.创建套接字对象

family: ip类型, AF_INET -> ipv4, AF_INET6 -> ipv6
type: 传输协议的类型 , SOCK_STREAM -> TCP, SOCK_DGRAM -> UDP

server  = socket.socket()

2.绑定IP地址和端口

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

server.bind(('10.7.190.66', 8080))

3.启动服务器(监听请求)

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

server.listen(255)

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

创建一个死循环让服务器一直运行

while True:

5.等待客户端的请求

程序运行到这个地方,会停下来,等到有客户端来连接服务器,才会接着往后执行

connect, addr = server.accept()    # connect:套接字对象     addr:地址

6.发送消息

send() -发送数据,数据是二进制
程序运行到这个地方会停下来,知道客户端给服务器发送消息,才会接着执行

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

7.接收消息

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

data = connect.recv(1024)
print(data.decode(encoding='utf-8'))

8.关闭连接sss


服务器代码整合

server = scoket.scoket()
server.bind(('10.7.199.66',9090))
connect, addr = server.accept()
server.listen(255)
while True:
    message = input('输入消息:')
    server.send(message.encode(encoding='utf-8'))
    data = connect.recv(1024)
    print(data.decode(encoding='utf-8'))
    connect.close()

创建客户端套接字

1.创建套接字对象

client = socket.socket()

2.连接服务器

"""
connect((IP地址,端口))
"""

client.connect(('10.7.190.66', 8080))

3.接收消息

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

4.发送消息

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

5.关闭连接

client.close()

代码整合

client = socket.socket()
client.connect(('10.7.190.66', 8080))
data = client.recv(1024)
print('<<<')
print((data.decode(encoding='utf-8')))
message = input('>>>')
client.send(message.encode(encoding='utf-8'))
client.close()

根据网络接口请求数据:通过第三方库requests提供的方法

获取网络数据

response = requests.get('https://www.apiopen.top/satinApi?type=1&page=1')
print(response)
# 1)获取字符串形式的数据结果
# text = response.text
# print(type(text), text)
# 2)获取二进制数据
# data = response.content
# print(type(data), data)
# 3)获取json数据
message = response.json()
print(type(message), message)

套接字threading

需要模块 threading

1.什么是进程

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

2.什么是线程

进程想要执行任务,就必须要有线程.每个进程默认都有一个线程,这个线程叫主线程,;其他的线程叫子线程
程序默认都是在主线程中执行的

一个线程中执行多个任务,任务是串行执行的(一个一个的按顺序执行)
一个进程中如果有多个线程,多线程执行不同任务的时候是并行的(同时执行)

3.python中怎么使用多线程

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


def dowload(film):
    print('开始下载: %s time:%s' % (film, str(datetime.now())))
    sleep(5)
    print('%s下载完成  time:%s' % (film, str(datetime.now())))

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


# 1.直接创建线程类的对象
"""
a.语法:
线程对象 = Thread(target=函数, args=参数)    -    创建一个线程对象,并且返回.
b.说明
函数 - function类型的变量;这个函数的函数体就会在子线程中执行
参数 - 元祖;参数会传给target对应的函数
"""
t1 = threading.Thread(target=dowload, args=('小猪佩奇',))
t2 = threading.Thread(target=dowload, args=('超级飞侠',))

# 2.让线程开始执行任务
"""
线程对象.start()  -   开始执行子线程中的任务
"""
t1.start()
t2.start()
print('====================')
# 某个线程出现异常,是线程直接结束;进程不一定结束,所有的线程都结束,进程才会结束
print([12][3])
print('++++++++++++++++++++++++++')

你可能感兴趣的:(day19-socket,threading)