基于python实现简单C/S模式代码实例

下面是详细的攻略:

简介

C/S模式是计算机网络中常见的模式之一,它指的是Client-Server模式,即客户端-服务器模式。在这种模式下,服务器端提供服务,客户端向服务器发起请求并接受服务。在本攻略中,我们将使用Python实现一个简单的C/S模型。

基础知识

在开始之前,我们需要掌握以下基础知识:

  1. socket模块:用于实现网络通信;
  2. threading模块:用于实现多线程。

服务器端

  1. 创建一个socket对象,指定网络通信协议和类型。

    python
    import socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  2. 绑定IP地址和端口号。

    python
    ip = '127.0.0.1' # 本地IP地址
    port = 8800 # 端口号
    server_socket.bind((ip, port))

  3. 设置监听,等待客户端连接。

    python
    server_socket.listen(5) # 最多允许5个客户端连接

  4. 定义一个多线程函数,用于接收来自客户端的消息,并处理。

    ```python
    import threading

    def handle_client(client_socket, client_address):
    while True:
    try:
    data = client_socket.recv(1024) # 接收消息
    print('{}:{} - {}'.format(client_address[0], client_address[1], data.decode('utf-8'))) # 打印消息
    except:
    print('{}:{}退出!'.format(client_address[0], client_address[1])) # 客户端关闭连接
    client_socket.close() # 关闭连接
    break
    ```

  5. 循环监听客户端连接,每当有新的客户端连入时,启动一个线程处理该客户端的消息。

    python
    while True:
    client_socket, client_address = server_socket.accept() # 接收客户端连接
    print('{}:{}已连接!'.format(client_address[0], client_address[1]))
    t = threading.Thread(target=handle_client, args=(client_socket, client_address)) # 启动一个线程处理该客户端的消息
    t.start()

  6. 完整代码实例请参考以下示例:

    ```python
    import socket
    import threading

    def handle_client(client_socket, client_address):
    while True:
    try:
    data = client_socket.recv(1024)
    print('{}:{} - {}'.format(client_address[0], client_address[1], data.decode('utf-8')))
    except:
    print('{}:{}退出!'.format(client_address[0], client_address[1]))
    client_socket.close()
    break

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ip = '127.0.0.1'
    port = 8800
    server_socket.bind((ip, port))
    server_socket.listen(5)
    print('服务器已启动......')
    while True:
    client_socket, client_address = server_socket.accept()
    print('{}:{}已连接!'.format(client_address[0], client_address[1]))
    t = threading.Thread(target=handle_client, args=(client_socket, client_address))
    t.start()
    ```

客户端

  1. 创建一个socket对象,用于连接服务器端。

    python
    import socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  2. 连接服务器。

    python
    ip = '127.0.0.1' # 服务器IP地址
    port = 8800 # 端口号
    client_socket.connect((ip, port))

  3. 发送消息给服务器端。

    python
    message = 'Hello, world!'
    client_socket.send(message.encode('utf-8'))

  4. 完整代码实例请参考以下示例:

    python
    import socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ip = '127.0.0.1'
    port = 8800
    client_socket.connect((ip, port))
    message = 'Hello, world!'
    client_socket.send(message.encode('utf-8'))
    client_socket.close()

示例说明

以下是两个示例:

示例1

服务器端:

import socket
import threading

def handle_client(client_socket, client_address):
    while True:
        try:
            data = client_socket.recv(1024)
            print('{}:{} - {}'.format(client_address[0], client_address[1], data.decode('utf-8')))
        except:
            print('{}:{}退出!'.format(client_address[0], client_address[1]))
            client_socket.close()
            break

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8800
server_socket.bind((ip, port))
server_socket.listen(5)
print('服务器已启动......')
while True:
    client_socket, client_address = server_socket.accept()
    print('{}:{}已连接!'.format(client_address[0], client_address[1]))
    t = threading.Thread(target=handle_client, args=(client_socket, client_address))
    t.start()

客户端:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8800
client_socket.connect((ip, port))
message = 'Hello, world!'
client_socket.send(message.encode('utf-8'))
client_socket.close()

在两个控制台中分别启动上述代码,可以看到客户端向服务器端发送了一条消息,并在服务器端控制台上打印了信息。

示例2

服务器端:

import socket
import threading

def handle_client(client_socket, client_address):
    while True:
        try:
            data = client_socket.recv(1024)
            print('{}:{} - {}'.format(client_address[0], client_address[1], data.decode('utf-8')))
        except:
            print('{}:{}退出!'.format(client_address[0], client_address[1]))
            client_socket.close()
            break

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8800
server_socket.bind((ip, port))
server_socket.listen(5)
print('服务器已启动......')
while True:
    client_socket, client_address = server_socket.accept()
    print('{}:{}已连接!'.format(client_address[0], client_address[1]))
    t = threading.Thread(target=handle_client, args=(client_socket, client_address))
    t.start()

客户端:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8800
client_socket.connect((ip, port))
message = input('请输入要发送的消息:')
client_socket.send(message.encode('utf-8'))
client_socket.close()

在客户端控制台中输入一条消息,可以看到服务器端控制台上打印出了该消息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python实现简单C/S模式代码实例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python基于network模块制作电影人物关系图

    Python基于network模块制作电影人物关系图可以分为以下几个步骤: 1. 数据搜集与清洗 首先需要搜集相关的电影数据,包括电影名称、演员、角色等信息,这些数据可以通过爬虫或开放的API获得。接着需要将数据进行清洗,去除重复数据,缺失值,不合法的字符等。 2. 数据处理与分析 将清洗好的数据导入Python中的networkx模块进行处理和分析。其中,…

    python 2023年5月18日
    00
  • 使用Python NumPy库绘制渐变图案

    以下是使用Python NumPy库绘制渐变图案的完整攻略: 1. 安装NumPy库 使用Python NumPy库绘制渐变图案需要安装NumPy库,可以使用以下命令进行安装: pip install numpy 2. 绘制渐变图案 2.1 生成渐变数组 要绘制渐变图案,首先需要生成一个渐变数组。可以使用NumPy的linspace函数生成线性空间数组,从而…

    python 2023年5月18日
    00
  • python爬虫框架scrapy实现模拟登录操作示例

    Python爬虫框架Scrapy实现模拟登录操作示例 在本文中,我们将介绍如何使用Python爬虫框架Scrapy实现模拟登录操作。我们将使用Scrapy框架来发送请求,并使用FormRequest对象来模拟登录。 步骤1:创建Scrapy项目 在使用Scrapy实现模拟登录操作之前,我们需要先创建一个Scrapy项目。以下是创建Scrapy项目的步骤: 安…

    python 2023年5月15日
    00
  • Python Tkinter实例——模拟掷骰子

    Python Tkinter是Python标准库中用于GUI(图形用户界面)编程的模块,可以帮助我们构建交互式的图形程序。本篇文章将详细讲解如何使用Python Tkinter模块实现一个简单的掷骰子程序。 安装Python Tkinter模块 Python Tkinter模块是Python标准库内置的一个模块,无需额外安装。使用Tkinter,必须要在代码…

    python 2023年6月3日
    00
  • python线程中同步锁详解

    下面是关于”Python线程中同步锁详解”的完整攻略: 什么是同步锁? 同步锁是用于多线程编程的重要工具之一,它可以确保多个线程不会同时访问共享资源,从而避免数据竞争和死锁等问题的发生。 在Python中,我们可以使用threading模块提供的Lock, RLock和Semaphore等类来实现同步锁。 Lock类详解 Lock类的基本用法 Lock类是普…

    python 2023年5月19日
    00
  • Python实现的凯撒密码算法示例

    以下是关于“Python实现的凯撒密码算法示例”的完整攻略: 简介 凯撒密码是一种简单的加密算法,它通过将明文中的每个字母按照一定的偏移量进行替换,从而得到密文。在本教程中,我们将介绍如何使用Python实现凯撒密码算法,并提供两个示例说明。 实现凯撒密码算法 以下是使用Python实现凯撒密码算法的代码: def caesar_cipher(text, s…

    python 2023年5月14日
    00
  • Python过滤序列元素的方法

    在Python中,我们可以使用不同的方法来过滤序列元素。本文将详细介绍Python中过滤序列元素的方法。 使用列表推导式过滤序列元素 列表推导式是一种简洁的语法,可以用于创建新的列表。我们可以在列表推导式中使用if语句来过滤序列元素。 以下是一个示例: numbers = [1, 2, 3, 4, 5, 6] even_numbers = [x for x …

    python 2023年5月14日
    00
  • Python实现的数据结构与算法之队列详解

    下面是详细讲解“Python实现的数据结构与算法之队列详解”的完整攻略。 队列的定义 队列(Queue)是一种先进出(FIFO)的数据构,类似于现实生活中的排队。队列有两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素添加到队列的末尾,出队操作将队列的第一个元移除返回。 队列实现 队列可以使用Python中的列表(list)来实现。…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部