0
点赞
收藏
分享

微信扫一扫

阿里云1+X云计算开发与运维实战——Python语言程序设计

背景知识

Python是一种跨平台的计算机程序设计语言。Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

编写Python网络通信程序

实验资源:

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端

登录阿里云控制台后,在产品与服务中选择云服务器ECS,进入ECS控制台,并在左侧的导航栏中选择实例。

阿里云1+X云计算开发与运维实战——Python语言程序设计_Python_02

找到对应的服务器资源,复制公网ip

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_03

在电脑上找到远程桌面连接,点击打开远程桌面连接。输入刚才复制的公网ip,并填写用户名administrator。点击下方连接。

阿里云1+X云计算开发与运维实战——Python语言程序设计_服务端_04

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_05

双击运行桌面的PyCharm软件。

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_06

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_Python_07

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_Python_08

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_09

注:tmd卡死了延迟..................................等5分钟

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_服务端_10

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_11

阿里云1+X云计算开发与运维实战——Python语言程序设计_Python_12

阿里云1+X云计算开发与运维实战——Python语言程序设计_服务端_13

我们先来编写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()

阿里云1+X云计算开发与运维实战——Python语言程序设计_Python_14

接下来进行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()

阿里云1+X云计算开发与运维实战——Python语言程序设计_服务端_15

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_服务端_16

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_17

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_18

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

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

阿里云1+X云计算开发与运维实战——Python语言程序设计_客户端_19

以上便完成了Python网络通信程序的编写。(源码见附件)


举报

相关推荐

0 条评论