用腾讯云轻量搭建 TeamSpeak 服务器
本文介绍 TeamSpeak 服务器端搭建方法 ,TeamSpeak (简称TS) 是一套专有的VoIP软件,使用者可以用耳机和麦克风,通过客户端软件连线到指定的服务器,与在服务器内频道的其他使用者进行通话。是一种很像电话会议的方式。 通常 TeamSpeak 的使用者大多为多人连线游戏的玩家,与同队伍的玩家进行通讯。在游戏的对战方面,语音对话通讯具有竞争优势。
如果您想找一个最快最简单的搭建方法,请参考 使用 Docker 搭建 TeamSpeak 服务器。除此之外的更多情况下,我更推荐按照本文来进行搭建。
请务必从官网下载最新版本服务端,否则可能会出现无法连接至服务器的情况
TeamSpeak 官网 teamspeak.com
安装前准备
- 首先需要一台腾讯轻量应用服务器购买:https://curl.qcloud.com/PMRSrAiz
为了保证系统的安全,不要使用 root 账户安装并配置TS服务器
执行一下系统更新操作:
apt update && apt full-upgrade -y
apt install curl vim wget git sudo unzip apt-transport-https screen ca-certificates dialog softw
新建一个用户
useradd teamspeak
切换至 /opt录下
cd /opt
复制并解压TS服务器端文件
wget https://files.teamspeak-services.com/releases/server/3.12.0/teamspeak3-server_linux_amd64-3.12.0.tar.bz2 && tar -xjvf teamspeak3-server_linux_amd64-3.12.0.tar.bz2 && rm teamspeak3-server_linux_amd64-3.12.0.tar.bz2
赋予刚刚新建的用户权限,并进入该目录
chown -R teamspeak:teamspeak teamspeak3-server_linux_amd64 && cd /opt/teamspeak3-server_linux_amd64 && su teamspeak
同意许可条款
touch .ts3server_license_accepted
您可以选择以下任意一种搭建方式进行搭建,若您不理解这些方式的区别,请直接使用第一种搭建方式,即使用 SQLite 搭建
数据库配置
方式一: 使用 SQLite 搭建
因 TeamSpeak 默认使用 SQLite, 所以直接执行以下操作即可自动配置,并启动服务器
./ts3server_startscript.sh start
注意保存密钥及 ServerQuery 管理员账户和密码
方法二:使用 MySQL/MariaDB 数据库搭建
- 首先使用 root 登录 MySQL/MariaDB
mysql -u root -p
- 会提示输入密码,输入密码登陆后,创建一个名为 teamspeak 的数据库
数据库名,用户名和密码请自行修改,此处以数据库名
teamspeak_database
,用户名teamspeak_user
及密码teamspeak_password
为例
CREATE DATABASE teamspeak_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 创建一个叫做
teamspeak_user
的用户,使用强大的密码并且赋予teamspeak_database
数据库权限
由于手机端的流行,我们已经不再使用 utf-8
编码,而改用 utf8mb4
这样我们就可以在 MySQL 数据库里储存 emoji 表情了。你甚至可以尝试使用 emoji 作为用户名或者密码。
GRANT ALL ON teamspeak_database.* TO 'teamspeak_user'@'localhost' IDENTIFIED BY 'teamspeak_password';
这里请将密码
teamspeak_password
改成你要设置的强大的没人能猜出来的随机的密码
终端会提示类似 Query OK, 0 rows affected, 1 warning 不用去管它
- 刷新权限,没问题就可以退出结束安装了
FLUSH PRIVILEGES;
EXIT;
进行后续步骤前,首先确保您已经安装 MySQL/MariaDB, 且已经创建好数据库
- 创建
ts3server.ini
文件,以启用数据库插件
若您已经使用的是 MySQL 数据库, 请将
dbpluginparameter=ts3db_mariadb.ini
部分修改为
dbpluginparameter=ts3db_mysql.ini
cat > ts3server.ini << EOF
dbplugin=ts3db_mariadb
dbpluginparameter=ts3db_mariadb.ini
dbsqlpath=sql/
dbsqlcreatepath=create_mariadb/
dbconnections=10
- 新建
ts3db_mariadb.ini
文件并输入如下内容
若您已经使用的是 MySQL 数据库, 请创建
ts3db_mysql.ini
, 不要创建ts3db_mariadb.ini
文件
[config]
server='localhost'
port='3306'
username='teamspeak_user'
password='teamspeak_password'
database='teamspeak_database'
将 数据库名
teamspeak_database
,用户名teamspeak_user
及密码teamspeak_password
部分修改为您自己数据库的信息
- 将 redist 目录下的
libmariadb.so.2
文件拷贝至当前目录下
cp redist/libmariadb.so.2 ./
执行以下操作即可启动服务器
./ts3server_startscript.sh start inifile=ts3server.ini
注意保存密钥及 ServerQuery 管理员账户和密码
设置自启动
创建并编辑文件 /lib/systemd/system/teamspeak.service
此步骤需要root权限
[Unit]
Description=Teamspeak, The most superior online voice communication solution.
Wants=network-online.target
After=syslog.target network.target network-online.target[Service]
User=teamspeak
Group=teamspeak
WorkingDirectory=/opt/teamspeak3-server_linux_amd64/
ExecStart=/opt/teamspeak3-server_linux_amd64/ts3server_startscript.sh start
ExecStop=/opt/teamspeak3-server_linux_amd64/ts3server_startscript.sh stop
PIDFile=/opt/teamspeak3-server_linux_amd64/ts3server.pid
Type=forking[Install]
WantedBy=multi-user.target
若您是使用 MySQL 或 MariaDB 数据库方式搭建的话,请将
ExecStart=/opt/teamspeak3-server_linux_amd64/ts3server_startscript.sh start
修改为
ExecStart=/opt/teamspeak3-server_linux_amd64/ts3server_startscript.sh start inifile=ts3server.ini
重新加载 systemd : systemctl daemon-reload
开启自启动(可选): systemctl enable teamspeak.service
启动 TeamSpeak : systemctl start teamspeak.service
停止 TeamSpeak : systemctl stop teamspeak.service
重启 TeamSpeak : systemctl restart teamspeak.service
TSDNS设置方法 (可选)
进入tsdns文件夹中,并创建的 tsdns_settings.ini
文件,
nano tsdns_settings.ini
配置的格式为 DOMAIN=IP:PORT
,比如:
example.com=1.1.1.1:9987
即代表将example.com
和其他任何以example.com
为后缀的域名,解析到地址为1.1.1.1:9987
的ts服务器包括 example.com, abc.example.com, abc.def.ghi.example.com …
*.example.com=2.2.2.2:9987
即代表将任何以符合
*.example.com
格式的域名,解析到地址为
1.1.1.1:9987
的ts服务器
- 包括 abc.example.com, abc.example.com, 123.example.com …
PORT 也可以调用变量, 如
abc.example.com=1.2.3.4:$PORT
*=1.2.3.4:10000
在这种情况下,它充当向后兼容机制, 可以对没有使用新 TSDNS 名称进行连接的人,连接至当前服务器.
- 比如一名用户连接至
test.example.com:20000
,则该用户会被自动转至1.2.3.4:10000
的服务器地址
- 比如一名用户连接至
IPv6 格式为
example.com=[2001:0db8::1]:9987
example.com=[2001:0db8::1]:9987 1.1.1.1:9987
域名 SRV 记录添加格式
此处以给 example.com
域名配置 TSDNS 为例, 假如 tsdns 的
类别 | 记录值 |
---|---|
名称 | _tsdns._tcp.example.com |
Priority | 1 |
Weight | 0 |
Port | 41144 |
Address | tsdns.example.com |
此处以 TSDNS 所在服务器地址为 tsdns.example.com 为例,
Address
部分请务必填写为域名格式。
类别 | 记录值 |
---|---|
名称 | _ts3._udp.example.com |
Priority | 1 |
Weight | 0 |
Port | 9987 |
Address | teamspeak.example.com |
Port
为 TeamSpeak 服务器地址端口,Address
为 TeamSpeak 服务器地址
接下载, 运行tsdnsserver程序即可,现在连接到TS服务器,可以看到已经显示成功
可通过此代码来后台运行
screen -AmdS tsdns ./tsdnsserver
添加至开机自启动 (可选)
通过 crontab 来实现开机启动
crontab -e
在文件中添加
@reboot /opt/teamspeak3-server_linux_amd64/tsdns/tsdnsserver
关闭编辑器并保存。
接下来,你可以通过 crontab -l
来确认是否添加成功即可。
许可证介绍
2018-09-11 Non-Profit License (NPL) 现在申请接口已经关闭,许可证相关信息也发生了改变
2019-03-23 许可证信息前不久又发生了改变,当前许可证状态
2019-10-06 官方于 2019-05-13
[1] 上线了 Sponsorship License,可供游戏俱乐部,教育机构,视频创作者使用,详细说明可在此处查看 https://teamspeak.com/sponsorship/ (Thanks to @xcgjack)
TeamSpeak 端口
TeamSpeak 默认情况下, 服务器端需要下表中的端口[2]
端口 | 协议 | 说明 |
---|---|---|
9987 | UDP | 默认语音服务器端口 |
10011 | TCP | ServerQuery raw 端口 |
10022 | TCP | ServerQuery SSH 端口(需要 3.3.0 以上版本服务端) |
10080 | TCP | ServerQuery HTTP 端口(需要 3.12.0 以上版本服务端) |
10443 | TCP | ServerQuery HTTPS 端口(需要 3.12.0 以上版本服务端) |
30033 | TCP | 文件传输端口 |
41144 | TCP | TSDNS |
服务端的所有端口都可自由更改
TeamSpeak 3 服务器还会与下方的地址进行连接[3]
域名 | 协议 | 本地端口(服务器) | 远程端口 | 说明 |
---|---|---|---|---|
accounting.teamspeak.com | TCP | 1024-65535 | 2008 | 3.0.x 服务端版本 |
accounting2.teamspeak.com | TCP | 1024-65535 | 443 | 3.1.x 服务端版本 |
ts3services.teamspeak.com | TCP | 1024-65535 | 443 | 3.1.x 服务端版本 |
weblist.teamspeak.com | UDP | 2011-2110 | 2010 | 全部服务端版本 |
至此 TeamSpeak 服务器端的搭建方法到此结束。
我们的 TeamSpeak 服务器列表 服务器列表
ServerQuery 相关部分
其实我对于 ServerQuery 的使用也是比较少,这次更新了通过 API 调用 ServerQuery 的方法之后,感觉之后可能我会拿他做一些比较好玩的事情吧,目前对于 HTTP/HTTPS 方式调用的官方说明还是比较少啦,但是官方有表示会写一个完整的 web-query 文档[3],但是以 TeamSpeak 的工作效率来看,怕是要又要咕蛮久的了。
首先,如何启用 http 或者 https query 呢,在之前的版本中 SSH RAW 的方式都是默认启用的,但是这次以我目前的测试来看,默认是关闭的
启用 HTTP / HTTPS ServerQuery
在 ts3server.ini 文件中添加以下内容
启用 HTTP 连接
默认端口为 10080,且默认情况下监听全部端口,可在此处自行修改
query_protocols=raw,ssh,http
query_http_ip=0.0.0.0,::
query_http_port=10080
如上所示填写后,会同时启用 raw,ssh,http
启用 HTTPS 连接
默认端口为 10443,且默认情况下监听全部端口,可在此处自行修改
query_protocols=https
query_https_ip=0.0.0.0,::
query_https_port=10443
query_https_certificate_file=your_cert.pem
query_https_private_key_file=your_key.pem
此处为仅启用 HTTPS
对于 ts3server.ini 的完整说明我会在日后进行详细说明
Web-Query 调用 示例
curl -H 'x-api-key: BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j' 'http://127.0.0.1:10080/gm?msg=Hello+World'
{"status":{"code":0,"message":"ok"}}
curl -H 'x-api-key: BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j' 'http://127.0.0.1:10080/1/channellist?-topic&-icon'
{"body":[{"channel_icon_id":"0","channel_name":"Default Channel","channel_needed_subscribe_power":"0","channel_order":"0","channel_topic":"Default Channel has no topic","cid":"1","pid":"0","total_clients":"1"}],"status":{"code":0,"message":"ok"}}
参数和可与这些参数一起使用的命令
{ "apikeyadd", { manage_scope, } },{ "apikeydel", { manage_scope, } },{ "apikeylist", { manage_scope, } },{ "banadd", { manage_scope, write_scope, } },{ "banclient", { manage_scope, write_scope, } },{ "bandel", { manage_scope, write_scope, } },{ "bandelall", { manage_scope, write_scope, } },{ "banlist", { manage_scope, write_scope, read_scope, } },{ "bindinglist", { manage_scope, read_scope } },{ "channeladdperm", { manage_scope, } },{ "channelclientaddperm", { manage_scope, } },{ "channelclientdelperm", { manage_scope, } },{ "channelclientpermlist", { manage_scope, write_scope, read_scope, } },{ "channelcreate", { manage_scope, write_scope, } },{ "channeldelete", { manage_scope, write_scope, } },{ "channeldelperm", { manage_scope, } },{ "channeledit", { manage_scope, write_scope, } },{ "channelfind", { manage_scope, write_scope, read_scope, } },{ "channelgroupadd", { manage_scope, write_scope, } },{ "channelgroupaddperm", { manage_scope, } },{ "channelgroupclientlist", { manage_scope, write_scope, read_scope, } },{ "channelgroupcopy", { manage_scope, } },{ "channelgroupdel", { manage_scope, } },{ "channelgroupdelperm", { manage_scope, } },{ "channelgrouplist", { manage_scope, write_scope, read_scope, } },{ "channelgrouppermlist", { manage_scope, write_scope, read_scope, } },{ "channelgrouprename", { manage_scope, } },{ "channelinfo", { manage_scope, write_scope, read_scope, } },{ "channellist", { manage_scope, write_scope, read_scope, } },{ "channelmove", { manage_scope, write_scope, } },{ "channelpermlist", { manage_scope, write_scope, read_scope, } },{ "clientaddperm", { manage_scope, } },{ "clientdbdelete", { manage_scope, write_scope, } },{ "clientdbedit", { manage_scope, write_scope, } },{ "clientdbfind", { manage_scope, write_scope, read_scope, } },{ "clientdbinfo", { manage_scope, write_scope, read_scope, } },{ "clientdblist", { manage_scope, write_scope, read_scope, } },{ "clientdelperm", { manage_scope, } },{ "clientedit", { manage_scope, write_scope, } },{ "clientfind", { manage_scope, write_scope, read_scope, } },{ "clientgetdbidfromuid", { manage_scope, write_scope, read_scope, } },{ "clientgetids", { manage_scope, write_scope, read_scope, } },{ "clientgetnamefromdbid", { manage_scope, write_scope, read_scope, } },{ "clientgetnamefromuid", { manage_scope, write_scope, read_scope,} },{ "clientgetuidfromclid", { manage_scope, write_scope, read_scope, } },{ "clientinfo", { manage_scope, write_scope, read_scope, } },{ "clientkick", { manage_scope, write_scope, } },{ "clientlist", { manage_scope, write_scope, read_scope, } },{ "clientmove", { manage_scope, write_scope, } },{ "clientpermlist", { manage_scope, write_scope, read_scope, } },{ "clientpoke", { manage_scope, write_scope, } },{ "clientsetserverquerylogin", { manage_scope, write_scope, } },{ "clientupdate", { manage_scope, write_scope, } },{ "complainadd", { manage_scope, write_scope, } },{ "complaindel", { manage_scope, write_scope, } },{ "complaindelall", { manage_scope, write_scope, } },{ "complainlist", { manage_scope, write_scope, read_scope, } },{ "custominfo", { manage_scope, write_scope, read_scope, } },{ "customsearch", { manage_scope, write_scope, read_scope, } },{ "customset", { manage_scope, write_scope, } },{ "customdelete", { manage_scope, write_scope, } },{ "ftcreatedir", not_supported },{ "ftdeletefile", not_supported },{ "ftgetfileinfo", not_supported },{ "ftgetfilelist", not_supported },{ "ftinitdownload", not_supported },{ "ftinitupload", not_supported },{ "ftlist", not_supported },{ "ftrenamefile", not_supported },{ "ftstop", not_supported },{ "gm", { manage_scope, } },{ "help", { manage_scope, write_scope, read_scope, } },{ "hostinfo", { manage_scope, write_scope, read_scope, } },{ "instanceedit", { manage_scope, } },{ "instanceinfo", { manage_scope, write_scope, read_scope, } },{ "logadd", { manage_scope, write_scope, } },{ "login", not_supported },{ "logout", not_supported },{ "logview", { manage_scope, write_scope, read_scope, } },{ "messageadd", { manage_scope, write_scope, } },{ "messagedel", { manage_scope, write_scope, } },{ "messageget", { manage_scope, write_scope, read_scope, } },{ "messagelist", { manage_scope, write_scope, read_scope, } },{ "messageupdateflag", { manage_scope, write_scope, } },{ "permfind", { manage_scope, write_scope, read_scope, } },{ "permget", { manage_scope, write_scope, read_scope, } },{ "permidgetbyname", { manage_scope, write_scope, read_scope, } },{ "permissionlist", { manage_scope, write_scope, read_scope, } },{ "permoverview", { manage_scope, write_scope, read_scope, } },{ "permreset", { manage_scope, } },{ "privilegekeyadd", { manage_scope, write_scope, } },{ "privilegekeydelete", { manage_scope, write_scope, } },{ "privilegekeylist", { manage_scope, write_scope, read_scope, } },{ "privilegekeyuse", { manage_scope, write_scope, } },{ "queryloginadd", { manage_scope, write_scope, } },{ "querylogindel", { manage_scope, write_scope, } },{ "queryloginlist", { manage_scope, write_scope, read_scope } },{ "quit", not_supported },{ "sendtextmessage", { manage_scope, write_scope, } },{ "servercreate", { manage_scope, } },{ "serverdelete", { manage_scope, } },{ "serveredit", { manage_scope, write_scope, } },{ "servergroupadd", { manage_scope, } },{ "servergroupaddclient", { manage_scope, } },{ "servergroupaddperm", { manage_scope, } },{ "servergroupautoaddperm", { manage_scope, } },{ "servergroupautodelperm", { manage_scope, } },{ "servergroupclientlist", { manage_scope, } },{ "servergroupcopy", { manage_scope, } },{ "servergroupdel", { manage_scope, } },{ "servergroupdelclient", { manage_scope, } },{ "servergroupdelperm", { manage_scope, } },{ "servergrouplist", { manage_scope, } },{ "servergrouppermlist", { manage_scope, } },{ "servergrouprename", { manage_scope, } },{ "servergroupsbyclientid", { manage_scope, } },{ "serveridgetbyport", { manage_scope, } },{ "serverinfo", { manage_scope, } },{ "serverlist", { manage_scope, } },{ "servernotifyregister", not_supported },{ "servernotifyunregister", not_supported },{ "serverprocessstop", { manage_scope, } },{ "serverrequestconnectioninfo", { manage_scope, write_scope, read_scope, } },{ "serversnapshotcreate", { manage_scope, } },{ "serversnapshotdeploy", { manage_scope, } },{ "serverstart", { manage_scope, } },{ "serverstop", { manage_scope, } },{ "servertemppasswordadd", { manage_scope, write_scope, } },{ "servertemppassworddel", { manage_scope, write_scope, } },{ "servertemppasswordlist", { manage_scope, write_scope, read_scope, } },{ "setclientchannelgroup", { manage_scope, write_scope, } },{ "tokenadd", { manage_scope, write_scope, } },{ "tokendelete", { manage_scope, write_scope, } },{ "tokenlist", { manage_scope, write_scope, read_scope, } },{ "tokenuse", { manage_scope, write_scope, } },{ "use", not_supported },{ "version", { manage_scope, write_scope, read_scope, } },{ "whoami", { manage_scope, write_scope, read_scope, } },
参考链接
Teamspeak 3 Server Ports
Teamspeak 3 server TSDNS setup
Server address resolution and TSDNS changes with Client 3.1.x
Does TeamSpeak 3 support DNS SRV records?
TeamSpeak Server 3.12.0
- TeamSpeak Official Twitter
- What ports TeamSpeak 3 server use?
- TeamSpeak Server 3.12.0
用腾讯云轻量搭建 TeamSpeak 服务器相关推荐
- 利用腾讯云轻量搭建私人云盘-Cloudreve
利用腾讯云轻量搭建私人云盘-Cloudreve 购买链接:https://cloud.tencent.com/act/pro/lighthouse 大陆地区1核1G3Mbps的机器128一年,非常适合 ...
- # 腾讯云轻量应用服务器(香港)最新测评
腾讯云轻量应用服务器(香港)最新测评 腾讯云轻量云服务,昨天正式全面上线了,之前听说说是非常好.我看到了一下境外区域的服务器最低价只需24元/月,不假思索,果断上车,毕竟我们不能做云评测,还是要以实际 ...
- 腾讯云轻量应用服务器端口开放教程(在防火墙设置)
腾讯云轻量应用服务器如何开放端口?在防火墙中添加规则来实现的,云服务器吧以轻量服务器开放80端口为例来详细说下腾讯云轻量应用服务器开放端口方法教程: 腾讯云轻量服务器开放端口教程 腾讯云服务器CVM开 ...
- 使用腾讯云轻量应用服务器搭建dplayer播放器弹幕服务器
说明 Dplayer播放器就不过多介绍了,不知道的可以查看官方项目地址:点击查看,算是目前国内比较火的视频播放器,貌似很多人喜欢用弹幕功能,而官方提供的弹幕api已经挂了,所以我们想使用的话,要么使用 ...
- 使用腾讯云轻量应用服务器搭建网络质量拨测工具 SmokePing
本文原载于 https://www.idc.moe/archives/qcloud-Lighthouse-SmokePing.html 作者:iks SmokePing 是由 RRDtool 的作者 ...
- 腾讯云轻量应用服务器搭建即时通信 IM系统
我们如果想要搭建一个自己的即时通信系统,实现与好友的单聊或者创建群聊,这里推荐大家使用腾讯云的即时通信IM产品,部署十分简单,并且提供了免费版套餐可供试用.下面为大家介绍如何使用腾讯云轻量应用服务器搭 ...
- 【教程】腾讯云轻量应用服务器搭建聊天室
前言 前些日子听朋友说,他们领的腾讯云轻量246还在吃灰,我在萌备聊天室里看见了这个系统 感觉挺不错 那这篇文章就教大家用宝塔来搭建一个聊天室 介绍 Fiora系统非常简洁,而且也有很多功能,基于 n ...
- 如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?
1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站.博客.电商.论坛等各类应用以及各类开发测试环境. Pboot ...
- 如何搭建一个自己的音乐播放器-使用腾讯云轻量应用服务器搭建YesPlayMusic网易云播放器
项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品.而且还拥有一些网易云官方应用没有的功能,比如可以自动签到,支持PWA可以直 ...
- 腾讯云轻量应用服务器网站搭建基础教程简单易学
之前简单谈了一下服务器,感觉不去实践,总差点东西,那么这次就来从零开始学习如何玩服务器,由于本人也是新手,会逐步完善的,如果有什么错误,还请大佬们斧正.为了更好的入门,就利用宝塔面板这个工具,这样通过 ...
最新文章
- Java Web——文件下载getResourceAsStream()返回NULL解决方案
- input中的disabled 和 readonly的区别
- python接收最新邮件_Python接收Gmail新邮件并发送到gtalk的方法
- 敏捷开发免费管理工具——火星人预览之三:迭代,计划会,分配
- centos 更新源_centos6 更换yum源
- WinAPI: SetRectEmpty、IsRectEmpty
- 机器学习基础(五十二)—— 朴素贝叶斯细节
- C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
- 解决debian (Friendly ARM 嵌入式板)的sudo等一部分命令无法TAB补全
- Android UI 调试常用工具(Dump view UI hierarchy for Automator)
- 自定义Button按钮
- PPT图片虚化效果要怎样实现?
- 无法启动此程序 因为计算机中丢失msvcr100.dll,Windows7电脑提示丢失MSVCR100.dll怎么办?...
- excel单元格内容拆分_EXCEL批量拆分单元格,也可以这么快
- 本机号码校验不只是免输密码、免输短信验证码
- python中的df是什么意思_python df遍历的N种方式
- 什么是赛博朋克? 赛博朋克视觉体系简介
- 可执行程序的装载——刘世鹏20135304
- 【python自动化办公(14)】利用python向Word文档中写入内容(format格式化中槽的使用和自动生成请假条小应用)
- Camtasia2023喀秋莎录屏软件下载操作教程
热门文章
- php查拼音,php 输入汉字,查出对应的拼音
- 甲骨文裁员事件的思考
- 【剑指offer】19. 二叉树的镜像
- 推荐一款免费在线高效作图工具
- arduino超声波测距接线图详细_Arduino:超声波传感器+测距
- ART模式下dex2oat出错导致系统无法正常启动
- MySQL简单技巧(三):教你轻松用information_schema表+python实现表结构同步(上)——理论篇
- 【微信小程序】针对测试号获取openid报错40125错误的解决方案
- php 微信 40125,微信请求发生错误!错误代码:40125
- lptwrite matlab,matlab读取地震数据sgy