跳转至

客户端和服务器

客户端(Client)

客户端是指向服务器请求服务的计算机或程序。客户端通常是用户直接交互的设备或应用程序,它发送请求到服务器,并等待服务器返回响应。

  • 特点
    • 主动发起请求:客户端主动向服务器发送请求,例如请求网页、数据或其他资源。
    • 用户交互界面:通常提供用户界面,供用户输入和显示信息。
    • 资源有限:相对于服务器,客户端通常资源(如处理能力、存储空间)较有限。
  • 例子
    • Web浏览器:如Google Chrome、Mozilla Firefox等,通过HTTP向Web服务器请求网页。
    • Email客户端:如Microsoft Outlook、Thunderbird,通过IMAP或SMTP协议与邮件服务器通信。
    • 移动应用:如微信、Twitter等,通过API与服务器进行数据交互。

服务端(Server)

服务端是指响应客户端请求的计算机或程序。服务器通常是提供某种服务的设备或应用程序,它接收客户端的请求,处理请求并返回响应。

  • 特点
    • 被动等待请求:服务器被动地等待客户端的请求,并处理这些请求。
    • 处理能力强:通常具有强大的处理能力和大量的存储空间,能够处理大量并发请求。
    • 提供服务:服务器提供各种服务,如Web服务、文件服务、数据库服务等。
  • 例子
    • Web服务器:如Apache、Nginx,提供网页和其他Web资源。
    • 数据库服务器:如MySQL、PostgreSQL,处理数据库查询和事务。
    • 文件服务器:如FTP服务器,提供文件上传和下载服务。

客户端-服务器模型(Client-Server Model)

客户端-服务器模型是一种网络架构模型,在这种模型中,客户端和服务器各自承担特定的角色:

  • 客户端:发起请求,通常由终端用户使用。
  • 服务器:响应请求,提供资源或服务。

交互过程

  1. 客户端发起请求:客户端向服务器发送请求,例如请求一个网页或查询某个数据库记录。
  2. 服务器接收请求:服务器接收并处理客户端的请求。
  3. 服务器返回响应:服务器将处理结果返回给客户端。
  4. 客户端接收响应:客户端接收并处理服务器返回的响应,可能会显示给用户或进行进一步处理。

UDP(User Datagram Protocol,用户数据报协议)是一种简单的、无连接的传输层协议。UDP通信中的服务器和客户端各自承担特定的角色,通过发送和接收数据报进行通信。

UDP 服务器

UDP 服务器主要负责监听特定端口并处理客户端发送的数据报。由于UDP是无连接的,服务器不需要维护客户端连接状态。

UDP 服务器的工作流程

  1. 创建一个UDP套接字。
  2. 绑定到一个指定的IP地址和端口。
  3. 不断监听和接收来自客户端的数据报。
  4. 处理接收到的数据并可能发送响应数据报回客户端。
Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import socket

def udp_server():
    # 创建UDP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 定义服务器地址和端口
    server_address = ("0.0.0.0", 12345)

    # 绑定套接字到地址和端口
    server_socket.bind(server_address)
    print("Server is listening on {}:{}".format(*server_address))

    while True:
        # 接收数据
        data, client_address = server_socket.recvfrom(4096)
        print(f"Received {data.decode()} from {client_address}")

        # 发送响应
        if data.decode().lower() == "exit":
            print("Server exiting...")
            break

        response = "Hello, client!".encode()
        server_socket.sendto(response, client_address)

    # 关闭套接字
    server_socket.close()

if __name__ == "__main__":
    udp_server()

UDP 客户端

UDP 客户端负责向服务器发送数据报,并处理服务器的响应。由于UDP是无连接的,客户端不需要建立和关闭连接,只需发送数据报即可。

UDP 客户端的工作流程

  1. 创建一个UDP套接字。
  2. 向服务器发送数据报。
  3. 接收来自服务器的响应数据报(如果有)。
  4. 处理接收到的数据。
Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import socket

def udp_client():
    # 创建UDP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 定义服务器地址和端口
    server_address = ("127.0.0.1", 12345)

    try:
        # 发送数据到服务器
        message = "Hello, server!".encode()
        client_socket.sendto(message, server_address)

        # 接收服务器的响应
        data, server = client_socket.recvfrom(4096)
        print(f"Received {data.decode()} from server")

        # 发送退出消息
        exit_message = "exit".encode()
        client_socket.sendto(exit_message, server_address)

    finally:
        # 关闭套接字
        client_socket.close()

if __name__ == "__main__":
    udp_client()