python自动化(一)基础能力:7.python基础上之网络编程

一.网络编程

1.网络编程基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Socket编程-简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.Socket编程-udp编程

为看到效果先安装网络调试助手NetAssist.exe
在这里插入图片描述

3.1使用socket发送数据

from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
addr = ('192.168.1.103', 8080) #准备目标方的地址,网络助手的地址
data = "Hello Wrold"

#发送数据时,python3需要将字符串转成byte
#encode(‘utf-8’)# 用utf-8对数据进行编码,获得bytes类型对象
#decode()反过来
s.sendto(data.encode(),addr)

s.close()

运行程序后效果如下:
在这里插入图片描述

3.2使用socket接受数据

# 我们可以使用socket来接受网络助手发送过来的数据
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
addr = ('192.168.1.103', 8080) #准备目标方的地址,网络助手的地址
data = "Hello World"
s.sendto(data.encode(),addr) # 发送给网络助手

#等待接收数据
#1024表示本次接收的最大字节数
redata = s.recvfrom(1024)
print(redata)

s.close()

运行程序后,在网络助手上给程序发送一条数据。效果如下:
在这里插入图片描述
在这里插入图片描述

3.3 绑定信息

  • 绑定信息:让一个进程可以使用固定的端口
  • 如果不绑定端口,我们每运行一次程序系统就会自动分配一个端口
    在这里插入图片描述
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
s.bind(('', 8788))   #绑定一个端口,ip地址和端⼝号,ip⼀般不⽤写
addr = ('192.168.1.103', 8080)   #准备接收方地址
data = input("请输入:")
s.sendto(data.encode(),addr)
redata = s.recvfrom(1024) #1024表示本次接收的最⼤字节数
print(redata)
s.close()

运行程序效果如下:
在这里插入图片描述

3.4 聊天室

聊天室
from socket import *
import time
#1创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
bindAddr = ("",7088)
udpSocket.bind(bindAddr)#绑定
while True:
    #接收对方发送的数据
    recvData = udpSocket.recvfrom(1024)
    print('【%s】 %s.%s' %(time.ctime(),recvData[1],recvData[0].decode("GB2312"))) # 格式化输出获取到的数据
    a = input("请输入:")
    udpSocket.sendto(a.encode('GB2312'),('192.168.1.103',8080))
#5关闭套接字
udpSocket.close()

在这里插入图片描述

3.5 全双工聊天室

在这里插入图片描述

#导入模块
import threading
import time
from socket import *


#实现接受消息
class Recive(threading.Thread):
    def run(self):
        udpsocket = socket(AF_INET,SOCK_DGRAM) #创建套接字
        udpsocket.bind(("", 8089))  # 绑定地址,bind参数为元组.注意是要给接受消息的进程绑定端口,这样网络助手才知道发送给谁。
        while True:
            recivedata = udpsocket.recvfrom(1024) #接受最大为1024字节的消息
            # 格式化输出接受到的数据
            print("{0}_{1}给你发送消息:{2}".format(recivedata[1][0],recivedata[1][1],recivedata[0].decode("GB2312")))


#实现发送消息
class Set(threading.Thread):
    def run(self):
        udpsocket = socket(AF_INET,SOCK_DGRAM)

        while True:
            a = input("请输入:")
            udpsocket.sendto(a.encode("GB2312"),("192.168.1.103",8080)) #发送消息给指定地址

if __name__ == "__main__":
    recive = Recive()
    set = Set()
    recive.start() #启动子线程1完成接受消息
    set.start() #启动子线程2来完成发送消息

运行结果如下:
在这里插入图片描述

4.字符集

在这里插入图片描述

5.wireshark抓包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.TFTP协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.struct模块使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.udp广 播

在这里插入图片描述
在这里插入图片描述

9.数据包在网络中的通信过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.Socket编程-TCP编程

10.1 简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.2单进程TCP模型

服务端代码:

from socket import *
serSocket = socket(AF_INET, SOCK_STREAM)
localAddr = ('',7788) #
serSocket.bind(localAddr)
serSocket.listen(5)
while True:
    newSocket,destAddr = serSocket.accept()
    try:
        while True:
            recvData = newSocket.recv(1024) # 接受客户端发送的请求
            newSocket.send(b'hello I am server ') # 给客户端发送数据
            if len(recvData)>0:
                print("接收到", str(destAddr),recvData)
            else: #如果收到的客户端数据长度为0,代表客户端已经调用close()下线
                print("%s-客户端已关闭" %str(destAddr))
                break
    finally:
        newSocket.close()
serSocket.close()

客服端代码:

from socket import *

clientSocket = socket(AF_INET,SOCK_STREAM)

serAddr = ('192.168.1.103',7788)
clientSocket.connect(serAddr) # 连接服务端

clientSocket.send(b'hello I am client') # 给服务端发送数据

recvData = clientSocket.recv(1024) # 接受服务端发送的数据

print("接受到的数据为:",recvData)

clientSocket.close()

10.3多进程TCP模型

在这里插入图片描述
在这里插入图片描述

10.4多线程TCP模型

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值