Python中的客户端和服务端交互的基本内容

目录

网络协议

网络的通信方式

需要安装的组件和需要导入的包模块

安装的组件

导入包模块

如何创建客户端

如何创建服务端


网络协议

IPV4:是互联网协议的第四版,也是目前广泛使用的网络协议。它使用32位地址格式,理论上可以提供约43亿个唯一的IP地址。

IPv4地址通常以点分十进制格式表示,例如**192.168.1.1**。这种协议在互联网的早期发展中起到了关键作用,但由于地址资源有限,随着互联网的快速发展,IPv4地址逐渐耗尽。所以为了解决这种情况,所以推出了IPV6

IPV6:是IPv4的下一代协议,旨在解决IPv4地址不足的问题。IPv6使用128位地址格式,能够提供几乎无限的地址空间。

IPv6地址通常以冒号分隔的十六进制格式表示,例**2001:0db8:85a3:0000:0000:8a2e:0370:7334**。除了地址数量的巨大优势,IPv6还提供了更好的安全性、更高效的路由机制以及对多播和任播的支持。

网络的通信方式

异步通信

异步通信是一种数据传输方式,发送方和接收方的时钟是独立的,它们之间没有严格的同步关系。在这种通信方式中,数据通常以字符为单位传输,每个字符之间有明确的起始位和停止位来标识数据的开始和结束。异步通信的优点是简单灵活,适用于低速通信场景,例如串行端口通信 。然而,由于没有严格的时钟同步,数据传输效率相对较低,且容易受到噪声干扰。

同步通信

同步通信则要求发送方和接收方的时钟严格同步。数据以数据块(如帧)的形式传输,每个数据块的开始和结束由同步信号标识。同步通信的优点是数据传输效率高,适合高速通信场景 ,例如以太网通信。然而,同步通信需要精确的时钟同步机制,对硬件要求较高,且对噪声更为敏感。

三次握手

三次握手是TCP协议建立连接的过程。它确保了双方在通信之前已经准备好,并且能够正确接收和发送数据。三次握手的过程如下:

  1. SYN(同步序列号) :客户端向服务器发送一个SYN包,请求建立连接,并随机生成一个初始序列号X

  2. SYN-ACK(同步序列号确认) :服务器收到SYN包后,回复一个SYN-ACK包,确认客户端的请求,并随机生成自己的初始序列号Y,同时将客户端的序列号X加1后返回。

  3. ACK(确认) :客户端收到SYN-ACK包后,发送一个ACK包,确认服务器的序列号Y,并将序列号Y加1后返回。此时,连接建立完成。

四次握手

四次握手是TCP协议关闭连接的过程。它确保了双方在关闭连接之前已经完成所有数据的传输。四次握手的过程如下:

  1. FIN(结束):客户端向服务器发送一个FIN包,表示客户端已经完成数据发送。

  2. ACK(确认):服务器收到FIN包后,回复一个ACK包,确认客户端的结束请求。

  3. FIN(结束):服务器在完成自己的数据发送后,也向客户端发送一个FIN包,表示服务器也已经完成数据发送。

  4. ACK(确认):客户端收到服务器的FIN包后,回复一个ACK包,确认服务器的结束请求。此时,连接关闭。

需要安装的组件和需要导入的包模块

安装的组件

在进行网络编程时,通常需要安装以下组件:

  • 操作系统支持的网络协议栈:例如TCP/IP协议栈,这是操作系统自带的,用于支持网络通信。

  • 编程语言的运行环境:例如Python的Python解释器、Java的JDK等。

  • 网络开发工具:例如Wireshark(用于抓包分析)、Postman(用于测试HTTP请求)等。

导入包模块

在Python中,进行网络编程通常需要导入以下模块:

  • socket模块:用于创建和管理网络套接字。

  • select模块:用于实现I/O多路复用。

  • threading模块:用于实现多线程编程,提高程序的并发能力。

  • asyncio模块:用于实现异步编程,提高程序的效率。

如何创建客户端

python 复制代码
import socket

# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('127.0.0.1', 8080)
client_socket.connect(server_address)

try:
    # 向服务器发送数据
    message = 'Hello, Server!'
    client_socket.sendall(message.encode('utf-8'))

    # 接收服务器响应
    response = client_socket.recv(1024)
    print(f"Received: {response.decode('utf-8')}")

finally:
    # 关闭连接
    client_socket.close()

如何创建服务端

python 复制代码
import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址和端口
server_address = ('127.0.0.1', 8080)
server_socket.bind(server_address)

# 开始监听
server_socket.listen(5)
print("Server is listening on port 8080...")

try:
    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        print(f"Connection from {client_address}")

        try:
            # 接收客户端数据
            data = client_socket.recv(1024)
            if data:
                print(f"Received: {data.decode('utf-8')}")
                # 向客户端发送响应
                response = "Hello, Client!"
                client_socket.sendall(response.encode('utf-8'))
        finally:
            # 关闭客户端连接
            client_socket.close()
finally:
    # 关闭服务器socket
    server_socket.close()

注:单独创建服务端是可以直接运行的,但单独创建客户端可以编译,但是无法运行,因为没有开启对服务器的请求处于本地状态,无法进行数据消息交互传递

相关推荐
benchmark_cc6 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库6 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H6 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒6 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP6 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
2601_962382437 小时前
python快乐编程网络爬虫课后答案
python·网络爬虫·学习工具·课后答案·刷题app
鹏哥带你干乡墅8 小时前
优选乡墅赋能培训平台如何帮助提升乡村建设?
大数据·人工智能·python
江畔柳前堤8 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Figo_Cheung8 小时前
Figo基于RNC理论的宇宙演化第七纪元猜想
开发语言·php
veminhe8 小时前
python调用接口获取网络信息
python