超详细图文教程·阿里云免费学生ECS云服务器领取并使用全过程(部署Python多人聊天室程序,包含源码)

简介: 超级详细的教程,包括从领取到ECS云服务器,到最终部署成功Python多人聊天室程序的全部过程!花了一个晚上,在老师和同学的帮助下终于摸索出来了,想把我的整个过程都记录下来,也希望能为后来者提供一些便利,少踩点俺踩过的坑QwQ,最后由衷感谢我的老师和同学!

​前言:

Python课需要完成一个需要实现多人聊天室的实验,有个附加要求就是能否不局限在局域网中进行聊天,而是能实现连接公网就可以聊天。这就需要我们将服务端的Python代码放在云服务器上运行。

而我是一名软件工程系学生,目前正在上大二,由于在此之前从来没接触过这方面的内容,真的在这个过程中遇到了很多的问题,也是摸索了一个晚上,在老师和同学的帮助下才完成了云服务器的部署与使用。实际上我也查了很多的云服务器的使用教程,但是大多数都很复杂(很多都是针对web项目的部署),并且都不是很符合我目前的需求。所以就有了这篇新手教程。

正文:

一、参与阿里云“飞天加速计划”免费领取2.5个月ECS云服务器

1、参加计划获取资格 
阿里云飞天加速计划其实是一开始我的老师在上课的时候无意间提到的,后来室友在访问阿里云时发现了这个计划。参加计划后,根据网站中的指示进行,完成注册、学生认证、完成一个实验(大概15分钟左右就ok了)和一个测试(很简单,都是基础知识),大概进行到第四步就可以了,此时你就可以领取到2周的免费ECS云服务器。

整个过程十分的便捷和快速~

此时我们发现终于可以领取服务器了,但是一下上来一堆奇怪的配置,不过还好阿里云已经帮我们选择好了大部分配置,我们能进行抉择的就是云服务器上安装的操作系统。此时新手我建议选择windows操作系统的云服务器。这样领到的服务器最后的界面其实和win10的界面基本上一样,咱们也会很熟悉,很容易上手。

选错了也没有关系,操作系统之后都可以随时更改的。当然我们老师的意见是安装Linux系统,相较于windows系统更快一点。

2.png

 我选择的是windows server 2019 数据中心版 64位中文版

二、云服务器的连接与准备工作

1、云服务器连接(两种连接方式)
领取后就可以进行服务器连接了,不多说,直接上图

Step1:首先打开阿里云首页并登录,打开控制台
3.png

Step2:进入云服务器ECS界面
4.png

Step3:进入实例界面
5.png

Step4:点击实例,【如果实例界面空白可以调整一下上面的地域选择】
6.png

Step5:重置密码后远程连接,这里的密码就相当于电脑的开机密码,即用户登录密码 。之后使用VNC进行远程连接
7.png

8.png

Step6: 远程连接,输入(或重置)VNC密码,之后打开电脑,输入登陆密码即可
9.png

10.png

 如果有小伙伴觉得很卡也可以使用windows自带的远程桌面连接进行服务器的连接,我也更推荐这种连接方式!!!

具体连接步骤:windows搜索框输入“远程桌面连接”,或者Win+R键运行mstsc命令,打开远程桌面连接

第二种连接方式如下:

11.png

12.png

之后输入登录的密码就可以连接上啦!

13.png

2、云服务器准备(下载新的浏览器、下载Python配置环境)
云服务器中虽然和我们的电脑一样,但是真的是一穷二白,只有个回收站的图标,浏览器也只能用IE浏览器,我们先下个好点的浏览器吧!

打开桌面底栏的IE浏览器,首先打开它的下载开关,否则无法下载东西

14.png

15.png

16.png

然后就可以输入百度网址,搜索Chrome浏览器进行安装啦,你也可以安装自己喜欢的其他的浏览器~ 

17.png

此外,如果出现下面的情况,只需要不停的点击关闭应该就可以啦!

18.png

之后就是常规的配置Python环境,在这里我就不多介绍啦,这方面的教程有很多。此外,如果我想把我原来电脑中的东西快速上传到云服务器上该怎么办呢,比如我嫌Python官方网站下载安装包太慢,想先在自己电脑里下好后传到服务器里。

3、学会使用空投网站(选学)
如果说在两台电脑之间传输文件,可能第一时间想到的是下个QQ,不过这样实在太慢而且浪费资源,今天我们来学习使用空投网站,由于规定的限制这里就不放链接啦,百度一搜就可以出来了

19.png

实际上就是在本机这里上传需要的文件,获得提取码,然后再在需要下载的电脑上再次打开这个网站,输入提取码后即可下载。这个也可以用于去机房的时候需要自己以前打的代码,就可以把自己的代码文件通过空投网站下载到机房的电脑中,而不需要下载其他第三方软件。

终于!我们完成了云服务器的初步连接与准备!!!

三、云服务器的使用初体验(以我的Python多人聊天室项目为例子)

这里为了快捷,就直接放上我自己做的服务端和客户端的云服务器版本的多人聊天室代码啦!欢迎大家借这个例子来体验一下ECS云服务器的便捷和神奇嘿嘿

服务器端代码,需要修改IP地址为服务器私有地址(重要):

from socket import *
from sqlite3 import connect
import threading
from datetime import *

# 时间格式声明,用于后面的记录系统时间
ISOTIMEFORMAT = '%Y-%m-%d %H:%M:%S'                     

# 设置IP地址和端口号,这里注意要将IP地址换成云服务器自己的私有地址!!!
IP = '127.0.0.1'                 
PORT = 30000

# 用户列表和套接字列表,用于后面给每个套接字发送信息
user_list = []
socket_list = []

# 聊天记录存储至当前目录下的serverlog.txt文件中
try:
    with open('serverlog.txt', 'a+') as serverlog:                    
        curtime = datetime.now().strftime(ISOTIMEFORMAT)
        serverlog.write('\n\n-----------服务器打开时间:'+str(curtime)+',开始记录聊天-----------\n')
except:
    print('ERROR!')


# 读取套接字连接
s = socket()
s.bind((IP, PORT))
s.listen()
def read_client(s, nickname):                           
    try:
        return s.recv(2048).decode('utf-8')                     # 获取此套接字(用户)发送的消息
    except:                                                     # 一旦断开连接则记录log以及向其他套接字发送相关信息
        curtime = datetime.now().strftime(ISOTIMEFORMAT)        # 获取当前时间
        print(curtime)
        print(nickname + ' 离开了聊天室!')
        with open('serverlog.txt', 'a+') as serverlog:          # log记录
            serverlog.write(str(curtime) + '  ' + nickname + ' 离开了聊天室!\n')
        socket_list.remove(s)
        user_list.remove(nickname)
        for client in socket_list:                              # 其他套接字通知(即通知其他聊天窗口)
            client.send(('系统消息:'+ nickname + ' 离开了聊天室!').encode('utf-8'))



# 接收Client端消息并发送
def socket_target(s, nickname):                         
    try:
        s.send((','.join(user_list)).encode('utf-8'))               # 将用户列表送给各个套接字,用逗号隔开
        while True:
            content = read_client(s, nickname)                      # 获取用户发送的消息
            if content is None:
                break
            else:
                curtime = datetime.now().strftime(ISOTIMEFORMAT)    # 系统时间打印
                print(curtime)
                print(nickname+'说:'+content)
                with open('serverlog.txt', 'a+') as serverlog:      # log记录
                    serverlog.write(str(curtime) + '  ' + nickname + '说:' + content + '\n')
                for client in socket_list:                          # 其他套接字通知
                    client.send((nickname + '说:'+ content).encode('utf-8'))
    except:
        print('Error!')

while True:                                                     # 不断接受新的套接字进来,实现“多人”
    conn, addr = s.accept()                                     # 获取套接字与此套接字的地址
    socket_list.append(conn)                                    # 套接字列表更新
    nickname = conn.recv(2048).decode('utf-8')                  # 接受昵称

    if nickname in user_list:                                   # 昵称查重,相同则在后面加上数字
        i = 1
        while True:
            if nickname+str(i) in user_list:
                i = i + 1
            else:
                nickname = nickname + str(i)
                break

    user_list.append(nickname)                                  # 用户列表更新,加入新用户(新的套接字)
    curtime = datetime.now().strftime(ISOTIMEFORMAT)
    print(curtime)
    print(nickname + ' 进入了聊天室!')

    with open('serverlog.txt', 'a+') as serverlog:              # log记录
        serverlog.write(str(curtime) + '  ' + nickname + ' 进入了聊天室!\n')

    for client in socket_list[0:len(socket_list)-1]:            # 其他套接字通知
        client.send(('系统消息:'+ nickname + ' 进入了聊天室!').encode('utf-8'))

    # 加入线程中跑,加入函数为socket_target,参数为conn,nickname
    threading.Thread(target=socket_target, args=(conn,nickname,)).start()

不知道云服务器私有IP地址的小伙伴可以在云服务器上跑一下cmd(按键Win+R后运行cmd指令),输入ipconfig命令得到的IPv4地址就是我们需要的云服务器私有地址啦

客户端代码,需要修改IP地址为云服务器公网地址(重要):

from tkinter import *
from datetime import *
from socket import *
import threading
import sys
import tkinter
import tkinter.messagebox
from tkinter.scrolledtext import ScrolledText

ISOTIMEFORMAT = '%Y-%m-%d %H:%M:%S'         # 时间格式声明
IP = '127.0.0.1'                            # IP地址,注意这里填云服务器的公网地址不是私有地址!
Port = 30000                                # 端口号
s = socket()                                # 套接字


# 登录窗口
def Login_gui_run():                                            

    root = Tk()
    root.title("小刘聊天系统·登录")          # 窗口标题
    frm = Frame(root)

    root.geometry('300x150')                # 窗口大小

    nickname = StringVar()                                      # 昵称变量

    def login_in():                                             # 登录函数(检查用户名是否为空,以及长度)
        name = nickname.get()                                   # 长度是考虑用户列表那边能否完整显示
        if not name:
            tkinter.messagebox.showwarning('Warning', message='用户名为空!')
        elif len(name)>10:
            tkinter.messagebox.showwarning('Warning', message='用户名过长!最多为十个字符!')
        else:
            root.destroy()
            s.connect((IP, Port))                     # 建立连接
            s.send(nickname.get().encode('utf-8'))              # 传递用户昵称
            Chat_gui_run()                                      # 打开聊天窗口


    # 登录按钮、输入提示标签、输入框
    Button(root, text = "登录", command = login_in, width = 8, height = 1).place(x=100, y=90, width=100, height=35)
    Label(root, text='请输入昵称', font=('Fangsong',12)).place(x=10, y=20, height=50, width=80)
    Entry(root, textvariable = nickname, font=('Fangsong', 11)).place(x=100, y=30, height=30, width=180)

    root.mainloop()


# 聊天窗口
def Chat_gui_run():                                         
    window = Tk()
    window.maxsize(650, 400)                                # 设置相同的最大最小尺寸,将窗口大小固定
    window.minsize(650, 400)

    var1 = StringVar()
    user_list = []
    user_list = s.recv(2048).decode('utf-8').split(',')     # 从服务器端获取当前用户列表
    user_list.insert(0, '------当前用户列表------')


    nickname = user_list[len(user_list)-1]                  # 获取正式昵称,经过了服务器端的查重修改
    window.title("小刘聊天系统--"+nickname)                  # 设置窗口标题,体现用户专属窗口(不是)
    var1.set(user_list)                                     # 用户列表文本设置
    # var1.set([1,2,3,5])
    listbox1 = Listbox(window, listvariable=var1)           # 用户列表,使用Listbox组件
    listbox1.place(x=510, y=0, width=140, height=300)


    listbox = ScrolledText(window)                          # 聊天信息窗口,使用ScrolledText组件制作
    listbox.place(x=5, y=0, width=500, height=300)


    # 接收服务器发来的消息并显示到聊天信息窗口上,与此同时监控用户列表更新
    def read_server(s):
        while True:
            content = s.recv(2048).decode('utf-8')                      # 接收服务器端发来的消息
            curtime = datetime.now().strftime(ISOTIMEFORMAT)            # 获取当前系统时间
            listbox.insert(tkinter.END, curtime)                        # 聊天信息窗口显示(打印)
            listbox.insert(tkinter.END, '\n'+content+'\n\n')
            listbox.see(tkinter.END)                                    # ScrolledText组件方法,自动定位到结尾,否则只有消息在涨,窗口拖动条不动
            listbox.update()                                            # 更新聊天信息窗口,显示新的信息


            # 贼傻贼原始的用户列表更新方式,判断新的信息是否为系统消息,暂时没有想到更好的解决方案
            if content[0:5]=='系统消息:':
                if content[content.find(' ')+1 : content.find(' ')+3]=='进入':
                    user_list.append(content[5:content.find(' ')])
                    var1.set(user_list)
                if content[content.find(' ')+1 : content.find(' ')+3]=='离开':
                    user_list.remove(content[5:content.find(' ')])
                    var1.set(user_list)

    threading.Thread(target = read_server, args = (s,), daemon=True).start()


    var2 = StringVar()                                      # 聊天输入口
    var2.set('')                                    
    entryInput = Entry(window, width = 140, textvariable=var2)
    entryInput.place(x=5, y=305, width = 490, height = 95)


    # 发送按钮触发的函数,即发送信息
    def sendtext():
        line = var2.get()
        s.send(line.encode('utf-8'))
        var2.set('')                                        # 发送完毕清空聊天输入口

    #发送按钮
    sendButton = Button(window, text = '发 送', font=('Fangsong', 18), bg = 'white', command=sendtext)     
    sendButton.place(x=500, y=305, width = 150, height = 95)

    def on_closing():                                       # 窗口关闭二次确认函数,并确认后自动关闭程序
        if tkinter.messagebox.askokcancel("退出", "你确认要退出聊天室吗?"):
            window.destroy()
            sys.exit(0)

    window.protocol("WM_DELETE_WINDOW", on_closing)
    window.mainloop()
    

Login_gui_run()

注意:云服务器上需要运行的是服务端的代码,我们自己的电脑要运行的是客户端的代码!!

之后我们需要开放相应的端口号
阿里云的官方教程里有详细的端口开放过程,我这里就不多赘述啦,我们这个项目使用的是30000端口,所以只要开放这个端口就可以了,最后开放的效果如下:

21.png

在这之后就只需把服务端代码一直挂在云服务器上运行就ok啦

云服务器端运行效果截图如下:

20.png

客户端运行效果截图如下:

登录界面.png

昵称查重3.png

聊天窗口2.png

最后,你还可以将客户端的代码进行打包,生成exe文件,这样就可以将这个exe文件发给身居他乡的小伙伴们使用啦!!!

至此,所有工作告一段落!!!!希望这篇文章能给予到你一点微小的帮助,那将是我无限的荣幸~~

后记:

真的非常感谢阿里云能够提供这样一个免费领取ECS云服务器的活动,而且也做足了教程,能让我们这些从来没有接触过云服务器的新手也能快速上手并成功完成自己的项目。

还记得在我的电脑跑的客户端程序成功连接云服务器上的服务端时,那一瞬间的兴奋和狂喜瞬间扫清了我所有的疲惫。那是还是凌晨0点,我立马找到了我曾经的高中基友,打包exe程序后将程序发给了他们,最后在凌晨0点半,三个大学生在一个简陋的程序中兴奋的聊着奇奇怪怪的话题。那一夜我高兴的久久不能入眠。更感谢我的老师和朋友,即使是深夜时分,他们也全力支持着我的小项目,毫不吝啬教会了我很多相关的知识,甚至不惜从床上爬起来开启电脑开启热点帮我测试那个简陋的程序。

而在未来我的一个较大的项目也将用到服务器,我非常期待那个时候的场景,也一定会继续钻研服务器的使用这方面的知识,学习后端的知识。其实我研究前端的更多一些,但是在此刻,云服务器的神奇我改变了我的想法,如果有可能,未来我也会向着全栈工程师的方向努力!

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
并行计算 前端开发 异构计算
告别服务器繁忙,云上部署DeepSeek
本文以 DeepSeek-R1-Distill-Qwen-32B-FP8 为例,向您介绍如何在GPU实例上使用容器来部署量化的 DeepSeek-R1 蒸馏模型。
|
7天前
|
机器学习/深度学习 人工智能 开发者
DeepSeek服务器繁忙?拒绝稍后再试!基于阿里云PAI实现0代码一键部署DeepSeek-V3和DeepSeek-R1大模型
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程无需编写代码,极大简化了模型应用的门槛。
140 7
|
8天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
10天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
11天前
|
机器学习/深度学习 弹性计算 人工智能
在阿里云ECS上一键部署DeepSeek-R1
Open WebUI 和 Ollama 的联合,通过集成 DeepSeek-R1 的强大功能,赋予每一位用户使用尖端 AI 技术的能力,使得复杂的 AI 技术不再是遥不可及的梦想。无论是研究人员、开发者,还是企业用户,您都能从这一创新中获得新的灵感和增长点。本文介绍通过计算巢一键部署和使用DeepSeek-R1。
在阿里云ECS上一键部署DeepSeek-R1
|
3天前
|
机器学习/深度学习 人工智能 程序员
阿里云出手DeepSeek拒绝服务器繁忙,程序员直呼:真香!
阿里云PAI平台支持一键部署DeepSeek-V3和DeepSeek-R1大模型,用户无需编写代码即可完成从训练到部署的全过程。通过PAI Model Gallery,开发者可轻松选择并部署所需模型版本,享受高效、便捷的AI开发体验。教程详细介绍了开通PAI、选择模型及一键部署的具体步骤,帮助用户快速上手。
|
4天前
|
机器学习/深度学习 存储 弹性计算
阿里云gpu云服务器租用价格:最新收费标准及活动价格参考
阿里云gpu云服务器多少钱?A10卡GN7i GPU云服务器32核188G3213.99/1个月起,V100卡GN6v GPU云服务器8核32G3830.00/1个月起,阿里云GPU云服务器是基于GPU应用的计算服务,多适用于视频解码,图形渲染,深度学习,科学计算等应用场景,该产品具有超强计算能力、网络性能出色、购买方式灵活、高性能实例存储( GA1和GN5特有)等特点。下面小编来介绍下阿里云gpu云服务器最新的收费标准及活动价格。
|
4天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
4天前
|
机器学习/深度学习 存储 人工智能
2025年阿里云GPU服务器的租赁价格与选型指南
随着AI、深度学习等领域的发展,GPU服务器成为企业及科研机构的核心算力选择。阿里云提供多种GPU实例类型(如NVIDIA V100、A100等),涵盖计算型、共享型和弹性裸金属等,满足不同场景需求。本文详解2025年阿里云GPU服务器的核心配置、价格策略及适用场景,帮助用户优化选型与成本控制,实现高效智能计算。
|
4天前
|
存储 人工智能 弹性计算
2025年阿里云企业高性能云服务器租用价格与选型详解
随着企业数字化转型,阿里云于2025年推出多款高性能云服务器实例,涵盖计算、通用和内存密集型场景。文章分析了企业选择云服务器的核心要点,包括明确业务需求(如计算密集型任务推荐计算型实例)、性能与架构升级(如第八代实例性能提升20%),以及第九代实例支持AI等高算力需求。同时提供了配置价格参考和成本优化策略,助力企业实现效率与成本的最优平衡。

热门文章

最新文章

推荐镜像

更多