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

相关文章
|
4天前
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第6版(IPv6)的发展历程、技术特点以及在各领域的应用前景。通过对IPv4面临的问题进行分析,阐明了IPv6出现的必要性及其在地址空间扩展、安全性提升和自动配置等方面的显著优势。结合当前技术趋势和应用案例,展望了IPv6在未来网络中的发展潜力,为相关领域的研究和实践提供了参考。
|
4天前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
|
4天前
|
网络协议 物联网 5G
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展背景、技术特性及其在现代网络中的应用。通过分析IPv4面临的地址枯竭问题,阐述了IPv6作为解决方案的重要性和紧迫性。文章详细介绍了IPv6相较于IPv4的改进之处,如更大的地址空间、简化的包头格式、增强的组播支持等,并探讨了IPv6在实际部署中遇到的挑战及应对策略。通过对IPv6过渡技术和双栈技术的讨论,揭示了其在促进下一代互联网发展中的关键作用。此外,文章还展望了IPv6在未来网络安全、物联网整合以及新兴技术中的应用前景,强调了掌握IPv6技术对于把握未来互联网发展趋势的重要性。
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
2天前
|
SQL 安全 算法
网络安全的盾牌与剑:漏洞防御与加密技术的实战应用
【9月更文挑战第30天】在数字时代的浪潮中,网络安全成为守护信息资产的关键防线。本文深入浅出地探讨了网络安全中的两大核心议题——安全漏洞与加密技术,并辅以实例和代码演示,旨在提升公众的安全意识和技术防护能力。
|
6天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
22 5
|
3天前
|
数据挖掘 Python
【Python】应用:pyproj地理计算库应用
这篇博客介绍了 `pyproj` 地理计算库的应用,涵盖地理坐标系统转换与地图投影。通过示例代码展示了如何进行经纬度与UTM坐标的互转,并利用 `pyproj.Geod` 计算两点间的距离及方位角,助力地理数据分析。 安装 `pyproj`:`pip install pyproj`。更多内容欢迎关注本博客,一起学习进步! Pancake 🍰 不迷路。😉*★,°*:.☆( ̄▽ ̄)/$:*.°★* 😏
|
3天前
|
机器学习/深度学习 算法 搜索推荐
图神经网络综述:模型与应用
图神经网络综述:模型与应用
|
4天前
|
存储 数据安全/隐私保护 Python
Python常用数据结构——字典的应用
Python常用数据结构——字典的应用
|
4天前
|
JSON 网络协议 数据格式
30天拿下Python之使用网络
30天拿下Python之使用网络
下一篇
无影云桌面