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

yizhihongxing

下面是详细的攻略:

简介

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基于queue和threading实现多线程下载实例

    下面是关于如何使用Python基于queue和threading实现多线程下载的完整攻略: 简介 多线程下载是在计算机中常见的操作之一。在某些条件下,使用单个线程下载文件可能会花费大量时间。因此,使用多线程下载可以提高下载速度和效率。 Python提供了queue和threading两个标准模块,这两个模块结合使用可以轻松实现多线程下载。queue模块提供了…

    python 2023年5月19日
    00
  • Python实现字典的key和values的交换

    要交换Python字典中的key和values,可以采用以下步骤: 首先,创建一个字典。 把字典里的key和values交换位置,可以采用字典推导式的方式。具体来讲,可以创建一个新的字典,遍历原始字典,把原始字典的key和value倒置,最后把倒置后的key-value键值对添加到新的字典中。 删除原始字典。 以下是Python代码实现交换字典中key和va…

    python 2023年5月13日
    00
  • python二分法实现实例

    下面是详细讲解“Python二分法实现实例”的完整攻略,包含两个示例说明。 二分法 二分法是一种常用的查找算法,也称为折半查找。其基本思想是将有序数组分成两部分,然后判断目标值在哪一部分中,在该部分中继续查找,直到找到目标值或者确定目标值不存在为止。二分法的时间复杂度为O(log n),适用于大规模数据的查找。 Python实现二分法 下面是一个示例代码,用…

    python 2023年5月14日
    00
  • 对Python中数组的几种使用方法总结

    对Python中数组的几种使用方法总结 在Python中,数组以列表(list)的形式出现,可以通过下标来访问,也可以进行增删改查等操作。本文将会介绍几种常见的Python数组使用方法。 1. 创建数组 创建数组可以使用[]或list(),例如: arr1 = [1, 2, 3, 4, 5] arr2 = list(range(1, 6)) 2. 访问数组元…

    python 2023年6月5日
    00
  • Python实现的数据结构与算法之链表详解

    下面是详细讲解“Python实现的数据结构与算法之链表详解”的完整攻略,包括链表的定义、链表的基本操作链表的应用和两个示例说明。 链表定义 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点,如果链表为空,则头节点和尾节点都为None。 链表基本操作 链表的基操作包括插入、…

    python 2023年5月14日
    00
  • 使用Python实现批量ping操作方法

    使用Python实现批量ping操作方法的攻略如下: 安装必要的Python库 首先需要在你的机器上安装必要的Python库,其中最重要的是Python的ping库。命令行安装ping库可以采用如下命令: pip install ping3 生成IP列表 生成IP列表的方法有很多,这里我们介绍手动输入IP地址的方法。使用Python的input()方法获取用…

    python 2023年5月23日
    00
  • 详解Python PIL ImageOps.solarize()方法

    Python PIL库提供了ImageOps模块,该模块提供了许多有用的图像操作函数,包括ImageOps.solarize()方法。该方法提供了一种将图像中像素值小于threshold的像素反转颜色的功能,也就是说将图像中像素的颜色由[0, threshold)映射到(threshold, 255]区间,从而使图像产生“solarize(日晒)”效果。 方…

    python-answer 2023年3月25日
    00
  • 详解Python PIL getpalette()方法

    Python PIL库提供了getpalette()方法,可以用来获取图像调色板中的所有颜色值。接下来,我将为您提供一份完整攻略,来详细介绍getpalette()方法的相关内容。以下是攻略的大纲: getpalette()方法的概述 getpalette()方法的语法 getpalette()方法的参数 getpalette()方法的返回值 getpale…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部