iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >使用python实现一个简单ping pong服务器
  • 175
分享到

使用python实现一个简单ping pong服务器

python ping pong服务器python ping pong 2023-05-16 17:05:07 175人浏览 独家记忆
摘要

目录依赖环境客户端/服务器架构介绍什么是客户端/服务器架构如何使用客户端/服务器架构缺点python Socket编程写一个最简单的ping/pong服务总结依赖环境 本篇文章所依赖

依赖环境

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

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

  • 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来访问一下,它会打印客户端信息,例如:

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

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

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

上述代码,我们使用多线程,分为对当前主机的所有网卡监听了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字符串,服务器接收到的信息为:

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

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

总结

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

以上就是使用python实现一个简单ping pong服务器的详细内容,更多关于python ping pong服务器的资料请关注编程网其它相关文章!

--结束END--

本文标题: 使用python实现一个简单ping pong服务器

本文链接: https://www.lsjlt.com/news/210384.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用python实现一个简单ping pong服务器
    目录依赖环境客户端/服务器架构介绍什么是客户端/服务器架构如何使用客户端/服务器架构缺点python socket编程写一个最简单的ping/pong服务总结依赖环境 本篇文章所依赖...
    99+
    2023-05-16
    python ping pong服务器 python ping pong
  • 利用Rust实现一个简单的Ping应用
    目录目标命令行解析实现Ping周期性发送其他验证总结这两年Rust火的一塌糊涂,甚至都烧到了前端,再不学习怕是要落伍了。最近翻了翻文档,写了个简单的Ping应用练练手,被所有权折腾的...
    99+
    2022-12-08
    Rust实现Ping应用 Rust实现Ping Rust Ping
  • 使用Python实现一个简单的接口服务
    使用Python实现一个简单的接口服务,可以通过get、post方法请求该接口,拿到响应数据。创建一个api_server.py文件,添加代码如下: import flask, json from flask import reques...
    99+
    2023-01-31
    接口 简单 Python
  • 怎么用Rust实现一个简单的Ping应用
    这篇文章主要介绍了怎么用Rust实现一个简单的Ping应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Rust实现一个简单的Ping应用文章都会有所收获,下面我们一起来看看吧。目标实现一个Ping,功能...
    99+
    2023-07-04
  • 用Python实现一个简单的WebSoc
    ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和sendmessage这2个函数. 改代码...
    99+
    2023-01-31
    简单 Python WebSoc
  • python实现一个简单的dnspod
    实现一个简单的dnspod解析api:dnspod api地址:https://www.dnspod.cn/docs/records.html#record-create #!/usr/bin/env python # -*- coding...
    99+
    2023-01-31
    简单 python dnspod
  • 如何使用Python实现一个简易版Web服务器
    今天小编给大家分享一下如何使用Python实现一个简易版Web服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、简介我...
    99+
    2023-07-05
  • 教你使用Python实现一个简易版Web服务器
    目录一、简介二、Web服务器基础概念三、Python网络编程库四、实现简易Web服务器1.使用socket库创建服务器套接字。2.绑定服务器IP地址和端口。3.监听客户端连接。4.接...
    99+
    2023-05-14
    Python实现简易服务器 Python实现Web服务器
  • 用Python实现一个简单的线程池
    线程池的概念是什么?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是 如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能...
    99+
    2023-01-31
    线程 简单 Python
  • 用Python实现一个简单的用户系统
    目录前言正文总结前言  如标题所说,这是一个非常简单的程序,并不涉及任何高深的学问,更适合一些刚入手Python的新人研究一下基础内容的用法,此案列对于有些编程经验的人来讲...
    99+
    2024-04-02
  • Python实现一个简单的QQ截图
    目录前言一、需求分析二、截图三、矩形选择四、按钮设置总结前言   毕设有一部分要用到类似QQ截图的功能,这里记录制作过程。因为后期要添加人工智能的功能,所以用py...
    99+
    2024-04-02
  • python实现一个简单的web应用框架
    目录引言写应用框架需要写底层服务器么uwsgi基本使用安装uwsgi配置uwsgiuwsgi常用配置uwsgi启服和停服启动一个demo写一个简单的web应用框架总结引言 本篇文章所...
    99+
    2023-05-18
    python web应用框架 python web
  • Python 实现简单 Web 服务器
    最近有个需求,就是要创建一个简到要多简单就有多简单的web服务器,目的就是需要一个后台进程用来接收请求然后处理并返回结果,因此就想到了使用python来实现。 首先创建一个myapp.py文件,其中定义了一个方法,所有的请求都会...
    99+
    2023-01-31
    简单 服务器 Python
  • Python简单实现Web服务器
    import socket import re import gevent from gevent import monkey monkey.patch_all()# 识别等待时间,让协程切换 def client_handler(c...
    99+
    2023-01-31
    简单 服务器 Python
  • Java实现一个简单计算器
    先来看看界面效果: 源码如下: package test1;   import java.awt.Frame; import java.awt.TextField; import ...
    99+
    2024-04-02
  • 利用Python实现一个简单的Web汇率计算器
    目录Dash是什么网页搭建步骤安装相关依赖(库)导入相关包构建app构建结果输出函数网页结构Layout搭建callback回调参数设定界面效果前段时间刚接触到前端网页开发,但是对于...
    99+
    2024-04-02
  • 怎么使用python实现一个简单的贪吃蛇游戏
    本篇内容主要讲解“怎么使用python实现一个简单的贪吃蛇游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用python实现一个简单的贪吃蛇游戏”吧!pygame 写的“贪吃蛇”小游戏:...
    99+
    2023-07-02
  • 怎么使用Python元类编程实现一个简单的ORM
    这篇文章主要讲解了“怎么使用Python元类编程实现一个简单的ORM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python元类编程实现一个简单的ORM”吧!概述什么是ORM   ...
    99+
    2023-07-05
  • 用Python实现一个简单的抽奖小程序
    目录写在前面 实现结果 1 数据拉取2 数据清洗、去重3 中奖数据抽取python 相关知识点总结写在前面  因为粉丝福利,所以想自己写一个抽...
    99+
    2023-05-12
    python抽奖系统 python随机抽奖 python抽奖游戏
  • 用Python实现一个端口扫描,只需简单
    0、秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术。 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。 秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含...
    99+
    2023-01-30
    只需 简单 端口扫描
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作