自学内容网 自学内容网

【python】python网络编程

python socket编程

Python中的socket编程是一种网络编程的方法,用于在不同的计算机之间进行通信。它基于传输控制协议(TCP)或用户数据报协议(UDP)来建立网络连接,并通过套接字(socket)来发送和接收数据。

套接字是一种抽象的概念,它代表了一个网络连接的一端。套接字可以是客户端或服务器端,用于建立连接和进行数据传输。

在Python中,socket编程是通过socket模块来实现的。该模块提供了各种方法和类,用于创建、连接、发送和接收套接字。

常用的socket编程方法包括:

  • socket():创建一个套接字对象。
  • bind():将套接字绑定到指定的地址和端口。
  • listen():开始监听连接请求。
  • accept():接受客户端的连接请求。
  • connect():与服务器建立连接。
  • send():发送数据。
  • recv():接收数据。
  • close():关闭套接字连接。

使用socket编程,可以实现各种网络应用,比如创建一个简单的聊天程序、发送和接收文件,或者搭建一个简单的Web服务器等。

Transmission Control Protocol,传输控制协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输协议。它位于传输层,为应用层提供可靠的数据传输服务。TCP协议通过建立连接、数据传输和断开连接的过程来实现可靠的数据传输。

TCP协议的特点包括以下几个方面:

  • 可靠性:TCP协议通过使用序号、确认、重传等机制来确保数据的可靠传输。发送方在发送数据时,会给每个数据包分配一个序号,并等待接收方的确认,如果没有收到确认,则会进行重传。
  • 有序性:TCP协议可以保证数据按照发送的顺序来传输,接收方会重新排序接收到的数据,以保证应用层收到的数据按照发送的顺序组织。
  • 流量控制:TCP协议通过使用滑动窗口机制来控制发送方发送数据的速度,以防止接收方的缓冲区溢出。
  • 拥塞控制:TCP协议通过使用拥塞窗口机制来控制网络中的拥塞情况,以保证网络的稳定性和公平性。
  • 连接管理:TCP协议通过建立连接、维护连接和释放连接的过程来管理连接,可以确保数据的可靠传输和正确的流量控制。

总之,TCP协议提供了可靠的、面向连接的数据传输服务,适用于需要可靠性和有序性的应用程序。

服务端实现代码

from socket import *

# 定义服务器IP地址和端口号
IP = "127.0.0.1"
PORT = 5000
BUFLEN = 1024
# 创建一个TCP套接字
with socket(AF_INET, SOCK_STREAM) as listenSocket:
    # 绑定IP地址和端口号
    listenSocket.bind((IP, PORT))
    # 监听连接
    listenSocket.listen(5)
    print(f"Server is listening on {IP}:{PORT},please wait...")
    # 接受客户端连接
    dataSocket, addr = listenSocket.accept()
    print(f"Connected by {addr}")
    # 循环接收客户端发送的数据
    while True:
        # 接收数据
        received = dataSocket.recv(BUFLEN)
        # 如果接收到的数据为空,则退出循环
        if not received:
            break
        # 将接收到的数据解码为字符串
        info = received.decode("utf-8")
        # 打印接收到的数据
        print(f"Received: {info}")
        # 将接收到的数据发送回客户端
        dataSocket.sendall(info.encode("utf-8"))
    # 关闭套接字
    dataSocket.close()

客户端代码

from socket import *

# 定义IP地址和端口号
IP = '127.0.0.1'
PORT = 5000
BUFLEN = 1024
# 创建一个TCP套接字
with socket(AF_INET, SOCK_STREAM) as clientSocket:
    # 连接到服务器
    clientSocket.connect((IP, PORT))
    # 无限循环,直到用户输入exit
    while True:
        # 获取用户输入
        data = input('>>> ')
        # 如果用户输入exit或者空字符串,则退出循环
        if data == 'exit' or data == '':
            break
        # 发送用户输入的数据到服务器
        clientSocket.send(data.encode('utf-8'))
        # 接收服务器返回的数据
        data = clientSocket.recv(BUFLEN).decode('utf-8')
        # 打印服务器返回的数据
        print(data)


原文地址:https://blog.csdn.net/qq_18296979/article/details/140652488

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!