python中的网络编程

python中的网络编程

一、IP 地址的介绍

1.IP 地址的概念

在这里插入图片描述

2.IP 地址的表现形式

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

3.IP 地址的作用

在这里插入图片描述

4.查看 IP 地址

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

5.检查网络是否正常

在这里插入图片描述

6.小结

在这里插入图片描述

二、端口和端口号的介绍

1.问题思考

在这里插入图片描述

2.什么是端口

在这里插入图片描述

3.什么端口号

在这里插入图片描述

4.端口和端口号的关系

端口号可以标识唯一的一个端口。

5.端口号的分类

在这里插入图片描述

6.小结

在这里插入图片描述

三、TCP 的介绍

1.网络应用程序之间的通信流程

在这里插入图片描述

2.TCP 的概念

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

3.TCP 的特点

在这里插入图片描述

4.总结

TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网。

四、socket 的介绍

1.问题思考

在这里插入图片描述

2.socket 的概念

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

3.socket 的作用

负责进程之间的网络数据传输,好比数据的搬运工。

4.socket 使用场景

在这里插入图片描述

5.小结

进程之间网络数据的传输可以通过 socket 来完成, socket 就是进程间网络数据通信的工具。

五、TCP 网络应用程序开发流程

1.TCP 网络应用程序开发流程的介绍

在这里插入图片描述

2.TCP 客户端程序开发流程的介绍

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

3. TCP 服务端程序开发流程的介绍

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

4.小结

在这里插入图片描述

六、TCP 客户端程序开发

1.开发 TCP 客户端程序开发步骤回顾

在这里插入图片描述

2.socket 类的介绍

在这里插入图片描述

3.TCP 客户端程序开发示例代码

import socket


if __name__ == '__main__':
    # 创建tcp客户端套接字
    # 1. AF_INET:表示ipv4
    # 2. SOCK_STREAM: tcp传输协议
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 和服务端应用程序建立连接
    tcp_client_socket.connect(("192.168.131.62", 8080))
    # 代码执行到此,说明连接建立成功
    # 准备发送的数据
    send_data = "你好服务端,我是客户端小黑!".encode("gbk")
    # 发送数据
    tcp_client_socket.send(send_data)
    # 接收数据, 这次接收的数据最大字节数是1024
    recv_data = tcp_client_socket.recv(1024)
    # 返回的直接是服务端程序发送的二进制数据
    print(recv_data)
    # 对数据进行解码
    recv_content = recv_data.decode("gbk")
    print("接收服务端的数据为:", recv_content)
    # 关闭套接字
    tcp_client_socket.close()

在这里插入图片描述
网络调试助手充当服务端程序:
在这里插入图片描述

4.小结

在这里插入图片描述

七、TCP服务端程序开发

1.开发 TCP 服务端程序开发步骤回顾

在这里插入图片描述

2.socket 类的介绍

在这里插入图片描述

3.TCP 服务端程序开发示例代码

import socket

if __name__ == '__main__':
    # 创建tcp服务端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口号复用,让程序退出端口号立即释放
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) 
    # 给程序绑定端口号
    tcp_server_socket.bind(("", 8989))
    # 设置监听
    # 128:最大等待建立连接的个数, 提示: 目前是单任务的服务端,同一时刻只能服务与一个客户端,后续使用多任务能够让服务端同时服务与多个客户端,
    # 不需要让客户端进行等待建立连接
    # listen后的这个套接字只负责接收客户端连接请求,不能收发消息,收发消息使用返回的这个新套接字来完成
    tcp_server_socket.listen(128)
    # 等待客户端建立连接的请求, 只有客户端和服务端建立连接成功代码才会解阻塞,代码才能继续往下执行
    # 1. 专门和客户端通信的套接字: service_client_socket
    # 2. 客户端的ip地址和端口号: ip_port
    service_client_socket, ip_port = tcp_server_socket.accept()
    # 代码执行到此说明连接建立成功
    print("客户端的ip地址和端口号:", ip_port)
    # 接收客户端发送的数据, 这次接收数据的最大字节数是1024
    recv_data = service_client_socket.recv(1024)
    # 获取数据的长度
    recv_data_length = len(recv_data)
    print("接收数据的长度为:", recv_data_length)
    # 对二进制数据进行解码
    recv_content = recv_data.decode("gbk")
    print("接收客户端的数据为:", recv_content)
    # 准备发送的数据
    send_data = "ok, 问题正在处理中...".encode("gbk")
    # 发送数据给客户端
    service_client_socket.send(send_data)
    # 关闭服务与客户端的套接字, 终止和客户端通信的服务
    service_client_socket.close()
    # 关闭服务端的套接字, 终止和客户端提供建立连接请求的服务
    tcp_server_socket.close()

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

4.小结

在这里插入图片描述

八、TCP网络应用程序的注意点

在这里插入图片描述

九、案例-多任务版TCP服务端程序开发

1.需求

在这里插入图片描述

2.具体实现步骤

在这里插入图片描述

3.多任务版TCP服务端程序的示例代码:

import socket
import threading


# 处理客户端的请求操作
def handle_client_request(service_client_socket, ip_port):
    # 循环接收客户端发送的数据
    while True:
        # 接收客户端发送的数据
        recv_data = service_client_socket.recv(1024)
        # 容器类型判断是否有数据可以直接使用if语句进行判断,如果容器类型里面有数据表示条件成立,否则条件失败
        # 容器类型: 列表、字典、元组、字符串、set、range、二进制数据
        if recv_data:
            print(recv_data.decode("gbk"), ip_port)
            # 回复
            service_client_socket.send("ok,问题正在处理中...".encode("gbk"))

        else:
            print("客户端下线了:", ip_port)
            break
    # 终止和客户端进行通信
    service_client_socket.close()


if __name__ == '__main__':
    # 创建tcp服务端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口号复用,让程序退出端口号立即释放
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定端口号
    tcp_server_socket.bind(("", 9090))
    # 设置监听, listen后的套接字是被动套接字,只负责接收客户端的连接请求
    tcp_server_socket.listen(128)
    # 循环等待接收客户端的连接请求
    while True:
        # 等待接收客户端的连接请求
        service_client_socket, ip_port = tcp_server_socket.accept()
        print("客户端连接成功:", ip_port)
        # 当客户端和服务端建立连接成功以后,需要创建一个子线程,不同子线程负责接收不同客户端的消息
        sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
        # 设置守护主线程
        sub_thread.setDaemon(True)
        # 启动子线程
        sub_thread.start()


    # tcp服务端套接字可以不需要关闭,因为服务端程序需要一直运行
    # tcp_server_socket.close()

在这里插入图片描述

4.小结

编写一个TCP服务端程序,循环等待接受客户端的连接请求

 while True:
     service_client_socket, ip_port = tcp_server_socket.accept()

当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞

 while True:
     service_client_socket, ip_port = tcp_server_socket.accept() 
     sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
     sub_thread.start()

把创建的子线程设置成为守护主线程,防止主线程无法退出。

 while True:
     service_client_socket, ip_port = tcp_server_socket.accept() 
     sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
     sub_thread.setDaemon(True) 
     sub_thread.start()

十、socket之send和recv原理剖析

1.认识TCP socket的发送和接收缓冲区

当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,这个发送和接收缓冲区指的就是内存中的一片空间。

2.send原理剖析

在这里插入图片描述

3. recv原理剖析

在这里插入图片描述

4.send和recv原理剖析图

在这里插入图片描述

5.小结

不管是recv还是send都不是直接接收到对方的数据和发送数据到对方,发送数据会写入到发送缓冲区,接收数据是从接收缓冲区来读取,发送数据和接收数据最终是由操作系统控制网卡来完成。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python神经网络编程是一种使用Python编程语言来构建和训练神经网络模型的技术。它通过利用Python语言的简洁和易用性,使得神经网络编程变得更加高效和便捷。 Python神经网络编程可以应用于许多领域,如图像识别、自然语言处理、预测分析等。它能够通过训练神经网络模型来从复杂的数据提取有用的信息和模式。因此,Python神经网络编程具有很高的灵活性和适应性,可以适用于不同类型的数据和问题。 在Python神经网络编程,常用的库包括Keras、TensorFlow和PyTorch等。这些库提供了丰富的工具和函数,可以帮助我们构建、训练和评估神经网络模型。同时,它们也支持GPU加速,可以大大提升神经网络的计算效率。 对于高清图像处理,Python神经网络编程也有很好的应用。我们可以利用卷积神经网络(CNN)来提取图像的特征,并使用这些特征来进行分类、检测等任务。通过对大量数据的训练,神经网络可以学习到图像的高级特征,并能够准确地对图像进行处理和分析。 总而言之,Python神经网络编程是一种强大的工具,可以帮助我们构建和训练高效的神经网络模型。它不仅在科学研究有广泛应用,也在工业和商业领域发挥着重要作用。无论是处理图像、文本还是预测分析,Python神经网络编程都能够帮助我们实现高清的结果和高准确度的预测。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值