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

相关文章
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
1月前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
2月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
208 0
|
1月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
2月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
396 11
|
2月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
2月前
|
机器学习/深度学习 算法 安全
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
198 6
|
2月前
|
设计模式 决策智能 Python
Python条件控制:让程序学会"思考"的魔法
本文深入浅出地讲解Python条件控制,从基础if语句到多分支、嵌套结构,再到简洁的三元表达式与Python 3.10新增的match-case模式匹配,结合电商折扣、会员等级、ATM系统等实战案例,全面掌握程序“智能决策”的核心逻辑。
395 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
142 0

推荐镜像

更多