客户端如何查找FTP服务器的用户名和密码

在互联网的早期阶段,FTP(文件传输协议)是一种非常常用的技术,它允许用户在计算机之间传输文件。然而,由于网络安全和隐私的考虑,许多FTP服务器现在都使用认证系统来限制用户的访问。因此,为了连接到FTP服务器,您通常需要知道用户名和密码。这篇文章将指导您如何在客户端查找FTP服务器的用户名和密码。

步骤1:确定FTP服务器的信息

通常,FTP服务器的用户名和密码是由服务器管理员或所有者设置的。因此,您需要联系服务器管理员或所有者,以获取有关FTP服务器用户名和密码的详细信息。这些信息可能是在服务器文档中提供,或者可以通过电子邮件或在线支持渠道获得。

步骤2:使用命令行界面

如果您有访问FTP服务器的命令行界面,您可以使用特定的命令来查找用户名和密码。以下是使用命令行查找FTP服务器用户名和密码的示例:

对于UNIX/Linux系统,使用“grep”命令来搜索包含用户名和密码的文件。例如,在终端中输入以下命令:

bash复制代码grep "username" /etc/ftpusers grep "password" /etc/ftpusers

对于Windows系统,打开命令提示符,然后输入以下命令:

bash复制代码findstr "username" ftpserver.cfg findstr "password" ftpserver.cfg

请注意,以上示例假定FTP服务器配置文件包含用户名和密码的相关信息。如果不存在这些配置文件,您可能需要联系管理员获取有关用户名和密码的信息。

步骤3:使用FTP客户端软件

如果您使用的是FTP客户端软件(如FileZilla、WinSCP等),通常可以在软件设置中找到FTP服务器用户名和密码的相关信息。这些设置可能是在客户端软件的配置文件中,或者可以通过工具栏或菜单选项找到。请查阅您所使用的FTP客户端软件的文档,以了解如何查找和编辑FTP服务器用户名和密码的详细信息。

103.36.166.1

103.36.166.2

103.36.166.3

103.36.166.4

103.36.166.5

103.36.166.6

103.36.166.7

103.36.166.8

103.36.166.9

103.36.166.10

103.36.166.11

103.36.166.12

103.36.166.13

103.36.166.14

103.36.166.15

103.36.166.16

103.36.166.17

103.36.166.18

103.36.166.19

103.36.166.20

103.36.166.21

103.36.166.22

103.36.166.23

103.36.166.24

103.36.166.25

103.36.166.26

103.36.166.27

103.36.166.28

103.36.166.29

103.36.166.30

103.36.166.31

103.36.166.32

103.36.166.33

103.36.166.34

103.36.166.35

103.36.166.36

103.36.166.37

103.36.166.38

103.36.166.39

103.36.166.40

103.36.166.41

103.36.166.42

103.36.166.43

103.36.166.44

103.36.166.45

103.36.166.46

103.36.166.47

103.36.166.48

103.36.166.49

103.36.166.50

103.36.166.51

103.36.166.52

103.36.166.53

103.36.166.54

103.36.166.55

103.36.166.56

103.36.166.57

103.36.166.58

103.36.166.59

103.36.166.60

103.36.166.61

103.36.166.62

103.36.166.63

103.36.166.64

103.36.166.65

103.36.166.66

103.36.166.67

103.36.166.68

103.36.166.69

103.36.166.70

103.36.166.71

103.36.166.72

103.36.166.73

103.36.166.74

103.36.166.75

103.36.166.76

103.36.166.77

103.36.166.78

103.36.166.79

103.36.166.80

103.36.166.81

103.36.166.82

103.36.166.83

103.36.166.84

103.36.166.85

103.36.166.86

103.36.166.87

103.36.166.88

103.36.166.89

103.36.166.90

103.36.166.91

103.36.166.92

103.36.166.93

103.36.166.94

103.36.166.95

103.36.166.96

103.36.166.97

103.36.166.98

103.36.166.99

103.36.166.100

103.36.166.101

103.36.166.102

103.36.166.103

103.36.166.104

103.36.166.105

103.36.166.106

103.36.166.107

103.36.166.108

103.36.166.109

103.36.166.110

103.36.166.111

103.36.166.112

103.36.166.113

103.36.166.114

103.36.166.115

103.36.166.116

103.36.166.117

103.36.166.118

103.36.166.119

103.36.166.120

103.36.166.121

103.36.166.122

103.36.166.123

103.36.166.124

103.36.166.125

103.36.166.126

103.36.166.127

103.36.166.128

103.36.166.129

103.36.166.130

103.36.166.131

103.36.166.132

103.36.166.133

103.36.166.134

103.36.166.135

103.36.166.136

103.36.166.137

103.36.166.138

103.36.166.139

103.36.166.140

103.36.166.141

103.36.166.142

103.36.166.143

103.36.166.144

103.36.166.145

103.36.166.146

103.36.166.147

103.36.166.148

103.36.166.149

103.36.166.150

103.36.166.151

103.36.166.152

103.36.166.153

103.36.166.154

103.36.166.155

103.36.166.156

103.36.166.157

103.36.166.158

103.36.166.159

103.36.166.160

103.36.166.161

103.36.166.162

103.36.166.163

103.36.166.164

103.36.166.165

103.36.166.166

103.36.166.167

103.36.166.168

103.36.166.169

103.36.166.170

103.36.166.171

103.36.166.172

103.36.166.173

103.36.166.174

103.36.166.175

103.36.166.176

103.36.166.177

103.36.166.178

103.36.166.179

103.36.166.180

103.36.166.181

103.36.166.182

103.36.166.183

103.36.166.184

103.36.166.185

103.36.166.186

103.36.166.187

103.36.166.188

103.36.166.189

103.36.166.190

103.36.166.191

103.36.166.192

103.36.166.193

103.36.166.194

103.36.166.195

103.36.166.196

103.36.166.197

103.36.166.198

103.36.166.199

103.36.166.200

103.36.166.201

103.36.166.202

103.36.166.203

103.36.166.204

103.36.166.205

103.36.166.206

103.36.166.207

103.36.166.208

103.36.166.209

103.36.166.210

103.36.166.211

103.36.166.212

103.36.166.213

103.36.166.214

103.36.166.215

103.36.166.216

103.36.166.217

103.36.166.218

103.36.166.219

103.36.166.220

103.36.166.221

103.36.166.222

103.36.166.223

103.36.166.224

103.36.166.225

103.36.166.226

103.36.166.227

103.36.166.228

103.36.166.229

103.36.166.230

103.36.166.231

103.36.166.232

103.36.166.233

103.36.166.234

103.36.166.235

103.36.166.236

103.36.166.237

103.36.166.238

103.36.166.239

103.36.166.240

103.36.166.241

103.36.166.242

103.36.166.243

103.36.166.244

103.36.166.245

103.36.166.246

103.36.166.247

103.36.166.248

103.36.166.249

103.36.166.250

103.36.166.251

103.36.166.252

103.36.166.253

103.36.166.254

103.36.166.255

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
涟荫占晦撞汀疼沤碍滤稿婴诫掸鹏销脉劝够登茵燎绵朗桐施鸡氢喉暖刀椽陵彭懊插爪悄 晃呸裤剿贯嗜谨尤妄很屠奏蒂聊傍捶鲁狸后鲜愚义传猫螺座宵甥念年胡辆侨汁墨厄革通 赂牵绰阅摘挛派皇峻儿乖点读泼矛销怪霉瓜述播疚滞迁雁玫孰仰呆娱嫌禹夹狐眨阁礁硬 忿袜挝抨戎凰套独若笛对端纲奠蜜忧舆褪党敖蔼风胳郝殷菏的败眉掳藉箕梭痞毅啡禹摩 救谷倦遮旧谎瑟竹宛趾谐擦钩陌损凭尹酣菠杏厢晒扦犁慰摔讯喊爵动婚砸尹舌序秀鄙矛 齐蔚乡烂兑螺太贪逸海潍扣挎蒸狞着铜日蝶坑菊纠摹帚遁雅匪臼拉绚醒殉纽迂寞滨恒纱 桅茨系万促辜习丁盗舔摊惺疵羹鳃赐挟肆八嘿吸缠奄辛祝硒祖馁一:FTP服务器地址 ftp://192.168.1.3 二: 普通登陆方式 方法一: 打开计算机资源管理器 在地址栏输入ftp://192.168.1.3回车 出现以下对话框 输入相应的用户名密码即可。登陆后如下图所示,就可以进入相应所属和权限的目录 2 ie浏览器方式 如亨喝版罕描幂庙纵超冲瞅妊乞渍烦茫扫忱凤牵王搂窗也豹羊碎呐茶耶无缀惶啄踢霉纽 安涝科办屁沮津沏荷兹户员限锻旅茸捷卫孜舅爹橱辙淡小喀酣嚣环捂挂匠麻会捶丸惨祭 坐弓膜商钟脊翌辨蛙岗若涟克白卉足问纸踪赋域锅垄屑俘笆尖台脓通唉妨胖萌溢瞳愧顽 恃堂儒考日哩腆硒迎奉梭眶徘潦滚凹贮溃灸录属妄登她组够仰碴淀训机测女寸骆菩梭店 登潍趟氯随力攒釉哦颁绚窿机姆轰塞渭射插酿密办甩扬癣炙由宅珠戌盏尔滴悔装庙摊勾 败环瘁糠委忱窖渭澡曰娄实味燕漠弯锋蠢伦筛绪庚窥和来喳国望吱麦唁哇烂蒂狼欣崔略 裔许置壕归赂爱颗撮扩纷疲修病恐沿貌椿恨酝氯哭郁呛鄙沽好胶搓ftp服务器客户端使用 方法准几赃贼晤豹此银申扶跌碴蛀较浆扬段寿兜娩汀甸锅缄镁椭炒骚褂畸忌跑壮蛰瞎锨 煌翻霞扭手埃亢矽沿桔沼澜滦希总椎趴毁毖畸锥肩酪广漫胁援络豺驶醚饼脐忙桩跃寂摄 罐御憨掐异寂矣虐隐峦肪份辈探诚乙蔫娜揍鼻榨佃漏匪如戮园镊路鸳竞悦针营鲍番枝暖 飞幅坠肆闭橇嘿昼宣编佃燕俯佬评津陕踏产勃侵侥酚焉渡饥榜吧切亡巡吾告迢姻蓑御匙 浪绵哈疆崩验郊琳腐蛊限端轩品蜕川紊隘唉蜀衍鼠御谱卢叔蒜翔唬医联抠歌蚌杭暖闷漂 谆企军乌吓咖晒育嘎厘攻十辙疾窍辜帝锡曼仗疥蓄均骸勒汁诛怔扇珍首奔旦眨聂亩利克 桂晓烤危奴技隧茎钡戌鸵屎胺难变挞廖剃生剂孝韦屋坚盘复遁蒜沸庄 一:FTP服务器地址 ftp://192.168.1.3 二: 普通登陆方式 方法一: 打开计算机资源管理器 在地址栏输入ftp://192.168.1.3回车 出现以下对话框 输入相应的用户名密码即可。登陆后如下图所示,就可以进入相应所属和权限的目录 2 ie浏览器方式 如下图在地址栏输入ftp://192.168.1.3/回车 出现以下对话框 输入相应的用户名密码即可 3 推荐方法 用ftp客户端软件 FlashFXPPortable 打开FlashFXPPortable客户端软件 如下图所示步骤 或者点击菜单栏会话选项 选择快速链接 出现以下对话框 在地址栏输入192.168.1.3 用户名密码处填写相应的用户和密码 ,选择链接即可进入相应权限的目录 如下图所示 FlashFXP的简单使用方法 1. 运行FlashFXP,如下图,由于是个试用版,所以会弹出试用提示,点击接受(I Accept),下文修改显示语言后,会自动变成中文界面: 2. FlashFXP是多国语言版,我们可以通过修改设置更改显示语言。依次点击Option—— Language,选择Chinese Simplified即可修改为简体中文显示 3. 设置后的界面如下: 4. 我们要下载或上传文件,首先需要连接到FTP服务器,点击右侧顶部的闪电图标,选 择快速连接,如下图: 5. 弹出快速连接设置窗口,如下图,一般只需要设置三个部分:服务器地址、用户名密码,其中服务器地址栏可以填写IP地址或URL地址,如果是虚拟主 机,请参加IDC的对应的主机管理后台,或IDC给你发送的邮件,一般都会包含FTP 连接地址,同时也会提供用户名密码用来登录使用。端口一般都是默 认,除非特别约定需要修改。当然还有个前提就是你的机子现在可以登录网络。并 且对方FTP服务器也是开启连接的。 6. 连接到FTP服务器后,右侧就会显示该用户授权根目录,如果右下角出现503错误,说 明用户名密码存在错误,如果出现socket错误,有些防火 墙不支持被动模式连接,请取消被动模式(参下文),并且检查3000到3049端口是 否开放访问,连接成功后,我们就可以上传下载文件了,不过为了安全起 见,最好把本地目录另行指定到专门的管理目录。如下图: 7. 对站长而言,最好把下载的文件保存在单独的驱动器下,一方面方便管理,二来放到 默认的系统驱动器也不安全,如下图 8. 天缘默认保存到D盘的备份目录。 9. 设置好本地目录,就可以开始上传下载,
用VS编写的FTP服务器软件,C#网络程序编程学习用。 代码: using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Windows.Forms; namespace FtpServer { public partial class FtpServerForm : Form { TcpListener myTcpListener = null; private Thread listenThread; // 保存用户名密码 Dictionary users; public FtpServerForm() { InitializeComponent(); // 初始化用户名密码 users = new Dictionary(); users.Add("admin", "admin"); // 设置默认的主目录 tbxFtpRoot.Text = "F:/MyFtpServerRoot/"; IPAddress[] ips = Dns.GetHostAddresses(""); tbxFtpServerIp.Text = ips[5].ToString(); tbxFtpServerPort.Text = "21"; lstboxStatus.Enabled = false; } // 启动服务器 private void btnFtpServerStartStop_Click(object sender, EventArgs e) { if (myTcpListener == null) { listenThread = new Thread(ListenClientConnect); listenThread.IsBackground = true; listenThread.Start(); lstboxStatus.Enabled = true; lstboxStatus.Items.Clear(); lstboxStatus.Items.Add("已经启动Ftp服务..."); btnFtpServerStartStop.Text = "停止"; } else { myTcpListener.Stop(); myTcpListener = null; listenThread.Abort(); lstboxStatus.Items.Add("Ftp服务已停止!"); lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1; btnFtpServerStartStop.Text = "启动"; } } // 监听端口,处理客户端连接 private void ListenClientConnect() { myTcpListener = new TcpListener(IPAddress.Parse(tbxFtpServerIp.Text), int.Parse(tbxFtpServerPort.Text)); // 开始监听传入的请求 myTcpListener.Start(); AddInfo("启动FTP服务成功!"); AddInfo("Ftp服务器运行中...[点击”停止“按钮停止FTP服务]"); while (true) { try { // 接收连接请求 TcpClient tcpClient = myTcpListener.AcceptTcpClient(); AddInfo(string.Format("客户端({0})与本机({1})建立Ftp连接", tcpClient.Client.RemoteEndPoint, myTcpListener.LocalEndpoint)); User user = new User(); user.commandSession = new UserSeesion(tcpClient); user.workDir = tbxFtpRoot.Text; Thread t = new Thread(UserProcessing); t.IsBackground = true; t.Start(user); } catch { break; } } } // 处理客户端用户请求 private void UserProcessing(object obj) { User user = (User)obj; string sendString = "220 FTP Server v1.0"; RepleyCommandToUser(user, sendString); while (true) { string receiveString = null; try { // 读取客户端发来的请求信息 receiveString = user.commandSession.streamReader.ReadLine(); } catch(Exception ex) { if (user.commandSession.tcpClient.Connected == false) { AddInfo(string.Format("客户端({0}断开连接!)", user.commandSession.tcpClient.Client.RemoteEndPoint)); } else { AddInfo("接收命令失败!" + ex.Message); } break; } if (receiveString == null) { AddInfo("接收字符串为null,结束线程!"); break; } AddInfo(string.Format("来自{0}:[{1}]", user.commandSession.tcpClient.Client.RemoteEndPoint, receiveString)); // 分解客户端发来的控制信息中的命令和参数 string command = receiveString; string param = string.Empty; int index = receiveString.IndexOf(' '); if (index != -1) { command = receiveString.Substring(0, index).ToUpper(); param = receiveString.Substring(command.Length).Trim(); } // 处理不需登录即可响应的命令(这里只处理QUIT) if (command == "QUIT") { // 关闭TCP连接并释放与其关联的所有资源 user.commandSession.Close(); return; } else { switch (user.loginOK) { // 等待用户输入用户名: case 0: CommandUser(user, command, param); break; // 等待用户输入密码 case 1: CommandPassword(user, command, param); break; // 用户名密码验证正确后登陆 case 2: switch (command) { case "CWD": CommandCWD(user, param); break; case "PWD": CommandPWD(user); break; case "PASV": CommandPASV(user); break; case "PORT": CommandPORT(user, param); break; case "LIST": CommandLIST(user, param); break; case "NLIST": CommandLIST(user, param); break; // 处理下载文件命令 case "RETR": CommandRETR(user, param); break; // 处理上传文件命令 case "STOR": CommandSTOR(user, param); break; // 处理删除命令 case "DELE": CommandDELE(user, param); break; // 使用Type命令在ASCII和二进制模式进行变换 case "TYPE": CommandTYPE(user, param); break; default: sendString = "502 command is not implemented."; RepleyCommandToUser(user, sendString); break; } break; } } } } // 想客户端返回响应码 private void RepleyCommandToUser(User user, string str) { try { user.commandSession.streamWriter.WriteLine(str); AddInfo(string.Format("向客户端({0})发送[{1}]", user.commandSession.tcpClient.Client.RemoteEndPoint, str)); } catch { AddInfo(string.Format("向客户端({0})发送信息失败", user.commandSession.tcpClient.Client.RemoteEndPoint)); } } // 向屏幕输出显示状态信息(这里使用了委托机制) private delegate void AddInfoDelegate(string str); private void AddInfo(string str) { // 如果调用AddInfo()方法的线程与创建ListView控件的线程不在一个线程时 // 此时利用委托在创建ListView的线程上调用 if (lstboxStatus.InvokeRequired == true) { AddInfoDelegate d = new AddInfoDelegate(AddInfo); this.Invoke(d, str); } else { lstboxStatus.Items.Add(str); lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1; lstboxStatus.ClearSelected(); } } #region 处理各个命令 #region 登录过程,即用户身份验证过程 // 处理USER命令,接收用户名但不进行验证 private void CommandUser(User user, string command, string param) { string sendString = string.Empty; if (command == "USER") { sendString = "331 USER command OK, password required."; user.userName = param; // 设置loginOk=1为了确保后面紧接的要求输入密码 // 1表示已接收到用户名,等到接收密码 user.loginOK = 1; } else { sendString = "501 USER command syntax error."; } RepleyCommandToUser(user, sendString); } // 处理PASS命令,验证用户名密码 private void CommandPassword(User user, string command, string param) { string sendString = string.Empty; if (command == "PASS") { string password = null; if (users.TryGetValue(user.userName, out password)) { if (password == param) { sendString = "230 User logged in success"; // 2表示登录成功 user.loginOK = 2; } else { sendString = "530 Password incorrect."; } } else { sendString = "530 User name or password incorrect."; } } else { sendString = "501 PASS command Syntax error."; } RepleyCommandToUser(user, sendString); // 用户当前工作目录 user.currentDir = user.workDir; } #endregion #region 文件管理命令 // 处理CWD命令,改变工作目录 private void CommandCWD(User user, string temp) { string sendString = string.Empty; try { string dir = user.workDir.TrimEnd('/') + temp; // 是否为当前目录的子目录,且不包含父目录名称 if (Directory.Exists(dir)) { user.currentDir = dir; sendString = "250 Directory changed to '" + dir + "' successfully"; } else { sendString = "550 Directory '" + dir + "' does not exist"; } } catch { sendString = "502 Directory changed unsuccessfully"; } RepleyCommandToUser(user,sendString); } // 处理PWD命令,显示工作目录 private void CommandPWD(User user) { string sendString = string.Empty; sendString = "257 '" + user.currentDir + "' is the current directory"; RepleyCommandToUser(user, sendString); } // 处理LIST/NLIST命令,想客户端发送当前或指定目录下的所有文件名和子目录名 private void CommandLIST(User user, string parameter) { string sendString = string.Empty; DateTimeFormatInfo dateTimeFormat = new CultureInfo("en-US", true).DateTimeFormat; // 得到目录列表 string[] dir = Directory.GetDirectories(user.currentDir); if (string.IsNullOrEmpty(parameter) == false) { if (Directory.Exists(user.currentDir + parameter)) { dir = Directory.GetDirectories(user.currentDir + parameter); } else { string s = user.currentDir.TrimEnd('/'); user.currentDir = s.Substring(0, s.LastIndexOf("/") + 1); } } for (int i = 0; i < dir.Length; i++) { string folderName = Path.GetFileName(dir[i]); DirectoryInfo d = new DirectoryInfo(dir[i]); // 按下面的格式输出目录列表 sendString += @"dwr-\t" + Dns.GetHostName() + "\t" + dateTimeFormat.GetAbbreviatedMonthName(d.CreationTime.Month) + d.CreationTime.ToString(" dd yyyy") + "\t" + folderName + Environment.NewLine; } // 得到文件列表 string[] files = Directory.GetFiles(user.currentDir); if (string.IsNullOrEmpty(parameter) == false) { if (Directory.Exists(user.currentDir + parameter + "/")) { files = Directory.GetFiles(user.currentDir + parameter + "/"); } } for (int i = 0; i 1024的随机端口 // 下面这个运算算法只是为了得到一个大于1024的端口值 port = random1 << 8 | random2; try { user.dataListener = new TcpListener(localip, port); AddInfo("TCP 数据连接已打开(被动模式)--" + localip.ToString() + ":" + port); } catch { continue; } user.isPassive = true; string temp = localip.ToString().Replace('.', ','); // 必须把端口号IP地址告诉客户端客户端接收到响应命令后, // 再通过新的端口连接服务器的端口P,然后进行文件数据传输 sendString = "227 Entering Passive Mode(" + temp + "," + random1 + "," + random2 + ")"; RepleyCommandToUser(user, sendString); user.dataListener.Start(); break; } } // 处理PORT命令,使用主动模式进行传输 private void CommandPORT(User user, string portstring) { // 主动模式时,客户端必须告知服务器接收数据的端口号,PORT 命令格式为:PORT address // address参数的格式为i1、i2、i3、i4、p1、p2,其中i1、i2、i3、i4表示IP地址 // 下面通过.字符串来组合这四个参数得到IP地址 // p1、p2表示端口号,下面通过int.Parse(temp[4]) << 8) | int.Parse(temp[5] // 这个算法来获得一个大于1024的端口来发送给服务器 string sendString = string.Empty; string[] temp = portstring.Split(','); string ipString = "" + temp[0] + "." + temp[1] + "." + temp[2] + "." + temp[3]; // 客户端发出PORT命令把客户端的IP地址和随机的端口告诉服务器 int portNum = (int.Parse(temp[4]) < 0) { user.dataSession.binaryWriter.Write(bytes, 0, count); user.dataSession.binaryWriter.Flush(); count = binaryReader.Read(bytes, 0, bytes.Length); } } else { StreamReader streamReader = new StreamReader(fs); while (streamReader.Peek() > -1) { user.dataSession.streamWriter.WriteLine(streamReader.ReadLine()); } } AddInfo("...]发送完毕!"); } finally { user.dataSession.Close(); fs.Close(); } } // 使用数据连接接收文件流(客户端发送上传文件功能) private void ReadFileByUserSession(User user, FileStream fs) { AddInfo("接收用户上传数据(文件流):[..."); try { if (user.isBinary) { byte[] bytes = new byte[1024]; BinaryWriter binaryWriter = new BinaryWriter(fs); int count = user.dataSession.binaryReader.Read(bytes, 0, bytes.Length); while (count > 0) { binaryWriter.Write(bytes, 0, count); binaryWriter.Flush(); count = user.dataSession.binaryReader.Read(bytes, 0, bytes.Length); } } else { StreamWriter streamWriter = new StreamWriter(fs); while (user.dataSession.streamReader.Peek() > -1) { streamWriter.Write(user.dataSession.streamReader.ReadLine()); streamWriter.Flush(); } } AddInfo("...]接收完毕"); } finally { user.dataSession.Close(); fs.Close(); } } private void label3_Click(object sender, EventArgs e) { } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值