python | 写一个简单ping|pong服务器

简介: python | 写一个简单ping|pong服务器

本篇文章所依赖的python 环境如下:

image.png


计算机网络应用体系结构,一般有以下几种:

  • C/S架构: 也称为客户端/客户端架构。
  • P2P架构: 是一种分布式网络架构。
  • 混个结构: 客户端/服务器架构 和 P2P架构都包含在内。

我们该篇文章,将介绍c/s网络结构。



客户端/服务器架构介绍


什么是客户端/服务器架构

客户端/服务器架构,也被称之为C/S架构,它是一种互联网最常见的网络结构,我们熟知的web服务器也是使用的C/S架构。还有数据库应用等,也是使用的C/S架构。


如何使用

在此网络架构中,服务器若想和客户端进行网络通信,服务器需要提前启动。客户端随之向服务器发送请求,服务器接收并且处理请求,最后将结果发送会客户端。服务器和客户端之间通信协议使用的是TCPUDP,前置称之为有连接服务器,后则称之为无连接服务。至于更上层的应用协议,如http是使用的TCP协议,如dns是使用的是UDP+TCP协议。


客户端/服务器架构缺点

此架构也是有缺点的,例如: 如果服务器发现故障,所有已经连接到服务器的客户端都会收到影响,以及服务器容易出现性能瓶颈等。



python socket编程

python中,为我们提供了一个内置socket模块,我们可以以此来创建一个自己的tcp服务器。


来看一个最简单的例子:

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("0.0.0.0",9999))
s.listen(5)
while True:
    client , addr = s.accept()
    print(client,addr)

上述代码,首先引入socket模块,而后定义了一个socket函数,传入必要参数,该函数会返回一个套接字对象给我们。


socket函数的参数分为2个,第1个参数需要指定网络协议,第二个参数需要指定套接字类型。下面是网络协议和套接字类型的说明:


网络协议

  • socket.AF_INET: 最常用的协议,代表IPv4协议族。
  • socket.AF_INET6: 代表IPv6协议族。
  • socket.AF_UNIX: 表示Unix文件描述符。

套接字类型

  • socket.SOCK_STREAM: 表示流式套接字(TCP)。
  • socket.SOCK_DGRAM: 表示数据包套接字(UDP)。
  • socket.SOCK_RAW: 表示原始套接字。

上述,我们使用的是IPv4协议,并且使用的是TCP流式套接字。

接着便是bind函数,它会将套接字绑定到指定的地址和端口上,参数必须是元组,分别为: 地址 和 端口号。


后续的listen函数,是指定套接字监听的最大连接数,如上述所示,表示最大连接数为5,为0则是不设置连接数。


最后是一个死循环,其中定义了accept函数,该函数用于等待客户端连接并且返回新的套接字对象。

代码在运行之后,我们可以使用telnet来访问一下,它会打印客户端信息,例如:

image.png

上述结果为打印了client信息,和client addr的地址。



写一个最简单的ping/pong服务


有了上述的python基础,我们可以来写一个最简单的ping/pong服务,不过我们想同时监听tcp流 和 udp数据包,代码如下:

image.png


上述代码,我们使用多线程,分为对当前主机的所有网卡监听了tcp端口8888udp端口8888,而后使用bind将套接字绑定到地址和端口,在监听tcp的时候,我们需要通过listen方法指定监听队列长度,而udp不用。


这是因为tcpudp协议不同导致的,tcp是可靠传输协议,所以当有新的请求来的时候,会通过accept方法接收新的连接,会产生一个新的socket对象。


udp是一种无连接不可靠协议,可以直接向目标主机发送数据,所以不需要先建立连接。而是直接调用recv方法接收数据。


接着便定义了一个空的列表threadJobs用于存放线程名称,而后便定义了2个线程,调用的方法是pingPongServer传入的参数是套接字类型和我们定义的套接字。


pingPongServer方法中,因为如上所述udp不需要accept,所以我们需要根据传入的套接字类型进行判断,若是tcp则执行accept,而后接收数据;若是udp,则直接接收数据即可。


启动服务器进程之后,我们分别使用telnetnc127.0.0.18888端口发送hello pdudo字符串,服务器接收到的信息为:

image.png

客户端发送数据后,接收到的信息如下:

image.png


一个简单的ping/pong服务器就写完了。



总结


本篇文章介绍了网络架构的分类,分为是 c/s架构、p2p架构 以及 网络架构;接着介绍了c/s架构的介绍以及优缺点。后面举了一个最简单的python socket的例子,最后实现了一个tcpudpping``pong小案例。




相关文章
|
2月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
436 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
|
20天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
252 1
|
2月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
435 0
|
20天前
|
弹性计算 编解码 大数据
性价比最高提升50%!阿里云企业级云服务器上新
阿里云ECS云服务器推出全新升级的u2系列实例,包括基于Intel的u2i实例与首个基于AMD的u2a实例,提供企业级独享算力,综合性价比最高提升50%。u2i实例已开放公测,适用于中小型数据库、企业网站建设等场景。同时发布基于AMD的第九代旗舰实例g9ae,性能提升65%,适用于大数据、视频转码等密集型业务。
131 0
|
30天前
|
弹性计算 运维 安全
阿里云轻量应用服务器是什么?看完你就知道了
阿里云轻量应用服务器是面向网站建设、开发测试等轻量场景的云服务器,按套餐售卖,内置多种应用镜像,支持一键部署,操作简单,适合个人开发者和中小企业使用。
218 0
|
2月前
|
存储 弹性计算 数据挖掘
阿里云2核4G5M带宽199元云服务器测评:价格、性能、适用场景与续费优势详解
阿里云目前活动中推出的“2核4G5M带宽199元1年”云服务器,是当下深受初创企业用户喜爱的云服务器。本文将从价格优势、性能优势和续费优势等几个方面,详细解析这款阿里云199元云服务器的各项特点,帮助大家更好地了解这款云服务器的性能和应用场景,以供选择参考。
|
1月前
|
存储 安全 数据挖掘
阿里云特惠云服务器轻量级38元,经济型99元,通用算力型199元性能、适用场景及选择参考
2025年,阿里云推出了3款特惠云服务器,轻量云服务器2核2G200M峰值带宽38元一年,经济型e实例云服务器2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年。本文将深度解析这三款现象级产品的配置亮点、适用场景,以供参考和选择。
|
1月前
|
弹性计算 运维 负载均衡
阿里云轻量应用服务器产品介绍、收费标准以及搭建个人博客教程参考
本文为大家介绍阿里云轻量应用服务器的产品优势、应用场景、使用须知、地域与网络连通性、与云服务器ECS的区别以及使用轻量应用服务器搭建WordPress个人博客的图文教程,以供大家了解和使用轻量应用服务器。

热门文章

最新文章

推荐镜像

更多