python网络编程

目录

1.网络基础

1.1TCP协议

1.2UDP协议

1.3Socket简介

2.TCP编程

2.1TCP客户端示例

2.2TCP服务器示例

3.UDP编程

3.1UDP客户端示例

3.2UDP服务器示例

4.小案例:简易聊天应用

4.1TCP聊天客户端

4.2TCP聊天服务器


1.网络基础

网络编程是指通过计算机网络进行数据交换的编程技术。在 Python 中,网络编程主要通过socket模块实现。

1.1TCP协议

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。特点包括:

  • 面向连接(需要建立连接才能通信)
  • 可靠传输(确保数据按序到达)
  • 流式传输(无消息边界)

TCP 通信流程:

  1. 服务器创建 socket 并绑定端口,开始监听
  2. 客户端创建 socket 并连接服务器
  3. 双方通过 send/recv 方法通信
  4. 关闭连接

1.2UDP协议

UDP(用户数据报协议)是一种无连接的传输层协议。特点包括:

  • 无连接(无需建立连接)
  • 不可靠传输(不保证数据到达)
  • 数据报(有消息边界)

UDP 通信流程:

  1. 服务器创建 socket 并绑定端口
  2. 客户端创建 socket
  3. 双方通过 sendto/recvfrom 方法通信
  4. 关闭 socket

1.3Socket简介

Socket 是网络通信的基础,是实现网络编程的抽象层。在 Python 中,socket 模块提供了对 Socket 的封装,使得我们可以轻松实现 TCP 和 UDP 通信。Socket 接口提供了发送、接收、连接、断开等操作,允许我们在程序中实现网络通信。

  • IPv4 和 IPv6:Socket 支持 IPv4 和 IPv6 协议,通过指定不同的地址族(AF_INET 表示 IPv4,AF_INET6 表示 IPv6)可以支持不同的网络环境。
  • 协议类型:Python 的 Socket 模块支持两种主要的协议类型:SOCK_STREAM 表示 TCP 协议,SOCK_DGRAM 表示 UDP 协议。

2.TCP编程

在 TCP 编程中,客户端和服务器之间的通信需要经过连接的建立和断开。以下是基于 Python 实现 TCP 客户端和服务器的示例。

2.1TCP客户端示例

import socket

def tcp_client():
    # 创建一个TCP客户端socket
    # AF_INET表示IPv4协议,SOCK_STREAM表示TCP协议
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接到服务器(IP和端口)
    client_socket.connect(('127.0.0.1', 12345))

    # 发送数据
    message = 'Hello,Server'

    client_socket.send(message.encode('utf-8'))#发送数据时需要进行编码
    
    #接受服务器响应
    response = client_socket.recv(1024)#接收最多1024字节的数据
    print('Received from server:',response.decode('utf-8'))#接收到的数据需要解码

    #关闭连接
    client_sockent.close()

if_name_=='_main_'
      tcp_cilent()

解释:

  • ocket.socket (socket.AF_INET, socket.SOCK_STREAM):创建一个 TCP 客户端 Socket,使用 IPv4 地址族(AF_INET)和 TCP 协议(SOCK_STREAM)。
  • client_socket.connect (('127.0.0.1', 12345)):通过 IP 地址和端口连接到服务器。
  • client_socket.send ():将数据发送到服务器,数据需要进行编码(encode ('utf - 8'))。
  • client_socket.recv ():接收来自服务器的数据,最多接收 1024 字节。
  • client_socket.close ():关闭客户端 Socket 连接。

2.2TCP服务器示例

import socket

def tcp_server():
    # 创建一个TCP服务器socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定服务器地址和端口
    server_socket.bind(('127.0.0.1', 12345))

    # 开始监听连接,最大连接数为5
    server_socket.listen(5)
    print('Server is listening...')

    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        print(f'Received message: {message.decode("utf-8")})

        #发送响应
        client_socket.send(b'Hello,Client')#发送响应数据,需要编码成字节形式

        #关闭连接
        client_socket.close()

if_name_=='_main_'
   tcp_server()

解释:

  • server_socket.bind (('127.0.0.1', 12345)): 绑定服务器的 IP 地址和端口。
  • server_socket.listen (5): 开始监听连接,最大连接数为 5。
  • server_socket.accept (): 接受客户端连接。
  • client_socket.recv (1024): 接收客户端消息。
  • client_socket.send (b'Hello, Client'): 向客户端发送响应消息。
  • client_socket.close (): 关闭与客户端的连接。

3.UDP编程

UDP 编程与 TCP 编程的最大区别在于 UDP 不需要建立连接,客户端和服务器直接发送和接收数据。

3.1UDP客户端示例

import socket

def udp_client():
    # 创建UDP客户端socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 发送数据
    message = 'Hello, UDP Server'
    client_socket.sendto(message.encode('utf-8'), ('127.0.0.1', 12345))  # 发送数据并指定目标地址

    # 接收服务器响应
    response, server_address = client_socket.recvfrom(1024)  # 接收数据和服务器地址
    print('Received from server:', response.decode('utf-8'))

    #关闭socket
    client_socket.close()

if_name_=='_main_'
  udp_client()

解释:

  • socket.socket (socket.AF_INET, socket.SOCK_DGRAM): 创建 UDP 客户端 Socket。
  • client_socket.sendto (): 发送数据到指定的目标地址和端口。
  • client_socket.recvfrom (): 接收来自服务器的响应,返回接收到的数据和服务器地址。

3.2UDP服务器示例

import socket

def udp_server():
    # 创建UDP服务器socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定服务器地址和端口
    server_socket.bind(('127.0.0.1', 12345))
    print('Server is listening...')

    while True:
        # 接收客户端消息
        message, client_address = server_socket.recvfrom(1024)  # 接收数据和客户端地址
        print(f'Received message: {message.decode("utf-8")}')

        # 发送响应
        server_socket.sendto(b'Hello, UDP Client', client_address)  # 向客户端发送响应

if __name__ == '__main__':
    udp_server()

解释:

  • server_socket.bind (('127.0.0.1', 12345)): 绑定服务器的 IP 地址和端口。
  • server_socket.recvfrom (1024): 接收来自客户端的数据,并返回数据和客户端地址。
  • server_socket.sendto (): 向指定客户端地址发送响应数据。

4.小案例:简易聊天应用

在本节中,我们设计一个简单的 TCP 聊天应用。客户端和服务器通过 TCP 协议进行通信,客户端发送消息,服务器接收并返回响应。

4.1TCP聊天客户端

import socket

def tcp_chat_client():
    # 创建TCP客户端Socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1', 12345))  # 连接服务器

    while True:
        message = input('You: ')  # 从用户输入获取消息
        if message.lower() == 'exit':  # 输入exit退出聊天
            break
        client_socket.send(message.encode('utf-8'))  # 发送消息
        response = client_socket.recv(1024)  # 接收服务器响应
        print('Server:', response.decode('utf-8'))  # 打印服务器响应

    client_socket.close()

if __name__ == '__main__':
    tcp_chat_client()

4.2TCP聊天服务器

import socket

def tcp_chat_server():
    # 创建TCP服务器Socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 12345))  # 绑定IP和端口
    server_socket.listen(5)  # 开始监听

    print('Server is waiting for connection...')
    client_socket, client_address = server_socket.accept()  # 接受客户端连接
    print(f'Connection established with {client_address}')

    while True:
        # 接收客户端消息
        message = client_socket.recv(1024)  # 接收消息
        if not message:
            break  # 如果没有接收到消息,则退出
        print('Client:', message.decode('utf-8'))  # 打印客户端消息
        response = input('You: ')  # 从服务器端输入回应
        client_socket.send(response.encode('utf-8'))  # 发送回应给客户端

    client_socket.close()  # 关闭客户端连接
    server_socket.close()  # 关闭服务器连接

if __name__ == '__main__':
    tcp_chat_server()

你可能感兴趣的:(个人笔记,网络)