python基础语法—day16(笔记)

文章目录

  • 主要内容:
    • 1.绑定端口的意义
    • 2.tcp的客户端
    • 3.tcp服务器
    • 4.文件下载案例
    • 5.多线程实现多任务

主要内容:

1.绑定端口的意义

UDP绑定信息:一般服务性的程序,往往需要一个固定的端口号,这就是所谓的端口绑定,绑定的意义是使其不变 。
一个电脑可以有多个IP地址
单工:收音机 半双工:对讲机 全双工:电话
UDP和TPC(网络)都是全双工,同一时间能发能收
一般,接收方都需要绑定,发送方不需要绑定

#绑定端口号和ip地址
s.bind(('192.168.43.30',9090))

2.tcp的客户端

udp:没有严格的客户端和服务端的区别
tcp:有客户端和服务端,面向连接的协议

import socket

#SOCK_STREAM是基于tcp的socket连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#udp直接使用sendto发送数据
#tcp在发送数据之前必须要先和服务器建立连接
#调用connect方法连接服务器
s.connect(('192.168.43.30',9000))
s.send('hello'.encode('utf8'))
s.close()

3.tcp服务器

import socket

# SOCK_STREAM是基于tcp的socket连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定
s.bind(('192.168.43.30', 9000))
# 1000  1120 ==> 120个排队
# 1000  1130 ==> 128个排队 另外2个就连接不上了
s.listen(128)  # 128表示队列的长度,把socket变成了一个被动监听的socket
# x=s.accept()  #接受客户端的请求
# 接受到的结果是一个元组,有两个元素
# 第0个元素是客户端的socket连接,第1个元素是客户端的ip地址和端口号
# print(x)
# (, ('192.168.43.30', 53981))
client_socket, client_addr = s.accept()
# tcp里使用recv获取数据
data = client_socket.recv(1024)
print('接收到了{}客户端{}端口号发送的数据,内容是:{}'.format(client_addr[0], client_addr[1], data.decode('utf8')))
s.close()

python基础语法—day16(笔记)_第1张图片

4.文件下载案例

文件下载客户端:

import socket

#tcp连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(('192.168.50.20',9000))

file_name=input('请输入要传输的文件:')

s.send(file_name.encode('utf-8'))

with open('xs1.jpg','wb') as file:
    while True:
        data = s.recv(1024)
        if not data:
            break
        file.write(data)

s.close()

文件下载服务端:

import socket
import os

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind(('192.168.50.20',9000))

s.listen(128)

socket_client,addr=s.accept()

data=socket_client.recv(1024)

print('从{}客户端的{}端口接收到内容为{}'.format(addr[0],addr[1],data.decode('utf-8')))

file_name=data.decode('utf-8')

if os.path.isfile(file_name):
    with open(file_name,'rb') as file:
        content=file.read()
        socket_client.send(content)

s.close()

5.多线程实现多任务

多个任务同时执行
python里执行多任务:多线程、多进程、多线程+多进程

import threading
import time


def dance():
    for i in range(50):
        time.sleep(0.3)
        print('我正在跳舞')


def sing():
    for i in range(50):
        time.sleep(0.3)
        print('我正在唱歌')


# target 需要的是一个函数,用来指定线程需要执行的任务
t1 = threading.Thread(target=dance)  # 创建了线程1
t2 = threading.Thread(target=sing)  # 创建了线程2
# 启动线程
t1.start()
t2.start()

你可能感兴趣的:(python,python)