Python网络通信程序典型应用

简介: 本实验将提供一台 Windows Server 2012 64位的 ECS 实例。首先进行Java环境的搭建与配置,然后进行Python开发环境的搭建与配置,最后使用Java与Python语言分别编写与运行简单程序,并进行验证。

Python网络通信程序典型应用

1.  创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要3~5分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2.  连接ECS服务器

  1. 在本地电脑上找到远程桌面连接,点击打开远程桌面连接。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269308566-3r72WM.png

  1. 在远程桌面连接端输入服务器IP地址用户名administer

说明:您可以切换到页面左上方「云产品资源」列表查看资源详情信息。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269335023-JxoVWh.png

  1. 在弹出的对话框中输入服务器密码,点击确定。并在证书选项选择是。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269359790-xKptLo.png

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269384077-eeguyB.png

4.    成功连接后进入服务器页面。

3.  编写Python网络通信程序

  1. 双击运行桌面的PyCharm软件。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269404823-axIJl9.png

  1. 打开后,选择Creat New Project创建新的工程。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269431171-VOUA64.png

  1. 点击create,等待创建过程的完成。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269469439-5s5v9j.png

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269490909-tYMAX4.png

  1. 创建完成后,右键选择New — Python File创建新的Python文件。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269523622-M6czys.png

  1. 在输入框中输入要新建的python文件的名字。回车确认后,即可看到创建好的python文件,这里我们创建两个文件,一个是client.py(客户端)另外一个是server.py(服务端)。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269569807-kSLDKi.png

  1. 我们先来编写client客户端的代码,创建一个socket对象,指定要连接的目标服务器ip及端口号,并向服务器端发送和接收数据。
import socket
#创建一个socket对象,指定要连接的目标服务器 ip及端口号
# 第一步
s =  socket.socket()
# 第二步
s.connect(('127.0.0.1',9999))
while True:
    recv_data = str(s.recv(20480), encoding='utf8') #客户端接收来自服务器端发送的数据
    print(recv_data)
    #连接成功后向服务器端发送数据
    send_data = input('')
    s.sendall(bytes(send_data,encoding = 'utf8'))
    if send_data=='bye':
           break
s.close()

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269634883-Ek9vrY.png

  1. 接下来进行server服务端的代码编写。
import socketserver
import random
all_choices = ['石头', '剪刀', '布']
win_list = [['剪刀', '布'], ['布', '石头'], ['石头', '剪刀']]
#创建一个socketserver类继承socketserver模块下的BaseRequestHandler类
class MyServer(socketserver.BaseRequestHandler):
    def handle(self, cwin=0,pwin=0):# 服务器端阻塞,等待客户端连接
        #重写父类中的handle方法,主要实现服务端的逻辑代码,,不用写bind() listen() accept()
        while True:
            conn = self.request
            addr = self.client_address
            print(conn)  #<socket.socket fd=864, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 50565)>
            print(addr)  #('127.0.0.1', 50565)
            while True:
                computer = random.choice(all_choices)
                send_data=('请出拳:(0) 石头(1) 剪刀(2) 布')
                send_data=send_data.encode()
                conn.sendall(send_data)
                recv_data = str(conn.recv(20480), encoding='utf8') #接收到来自客户端的数据
                print(recv_data)
                if recv_data == 'bye':   #如果客户端发送的是‘bye’就断开连接
                    break
                index = int(recv_data)
                player = all_choices[index]
                send_data = ('你出了:%s,计算机出了:%s' % (player, computer))
                send_data = send_data.encode()
                conn.sendall(send_data)
                if player == computer:
                     send_data = ('\033[32;1m平局\033[0m')
                     send_data = send_data.encode() # 类型转换
                     conn.sendall(send_data)  # 服务器端回复数据给客户端
                elif [player, computer] in win_list:
                     send_data = ('\033[32;1m你赢了!\033[0m')
                     send_data = send_data.encode()
                     conn.sendall(send_data)
                     pwin += 1
                else:
                     send_data=('\033[31;1m你输了!\033[0m')
                     send_data = send_data.encode()
                     conn.sendall(send_data)
                     cwin += 1
        conn.close()
if __name__ == '__main__':
    #实例化server对象,传入本机ip,以及监听的端口号,还有新建的继承socketserver模块下的BaseRequestHandler类
    server = socketserver.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
    #激活服务端
    server.serve_forever()

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269722415-RHuCBB.png

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269760496-BYQ7h4.png

  1. 运行客户端和服务端代码,验证效果。选择要运行的Python文件右键---选择Run(注意:这里要先运行server服务端)。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269788464-w18Mk4.png

Server服务端运行后效果如下:

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269826946-o9OEVV.png

Client客户端运行后效果如下:

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269856971-NC3C84.png

  1. 运行后验证程序,在client客户端下输入剪刀石头布所代表的数字,可以看到效果。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269894015-pk5OEW.png

同时也可以看到server服务端所返回的效果。

course-81da628237ad4c15a518242582a03754-section-0244dc94ea0d4ed9a4b2959231267455-content-image-1589269922215-Mky3VE.png

以上便完成了Python网络通信程序的编写。

实验链接:https://developer.aliyun.com/adc/scenario/188ac41b15184cec87ce74105f4c18dc

相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
23 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
29天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
257 55
|
2天前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
39 20
|
8天前
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
53 28
|
16天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
77 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
10天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
11天前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全能增强
在过去半年,ALB Ingress Controller推出了多项高级特性,包括支持AScript自定义脚本、慢启动、连接优雅中断等功能,增强了产品的灵活性和用户体验。此外,还推出了ingress2Albconfig工具,方便用户从Nginx Ingress迁移到ALB Ingress,以及通过Webhook服务实现更智能的配置校验,减少错误配置带来的影响。在容灾部署方面,支持了多集群网关,提高了系统的高可用性和容灾能力。这些改进旨在为用户提供更强大、更安全的云原生网关解决方案。
215 10
|
13天前
|
数据采集 JavaScript 前端开发
异步请求在TypeScript网络爬虫中的应用
异步请求在TypeScript网络爬虫中的应用
|
14天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
27天前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
73 6