FTP(TFTP)的下载与上传,连接命令

FTP(TFTP)的下载与上传,连接命令,第1张

首先在命令行键入ftp回车,出现ftp的提示符,这时候可以键入"help"来查看帮助(任何DOS命令都可以使用此方法查看其帮助)。
首先是登陆过程,这就要用到open了,直接在ftp的提示符下输入"open 主机IP ftp端口"回车即可,一般端口默认都是21,可以不写。接着就是输入合法的用户名和密码进行登陆了,这里以匿名ftp为例介绍。
用户名和密码都是ftp,密码是不显示的。当提示 logged in时,就说明登陆成功。这里因为是匿名登陆,所以用户显示为Anonymous。
接下来就要介绍具体命令的使用方法了。
dir 跟DOS命令一样,用于查看服务器的文件,直接敲上dir回车,就可以看到此ftp服务器上的文件。
cd 进入某个文件夹。
get 下载文件到本地机器。
put 上传文件到远程服务器。这就要看远程ftp服务器是否给了你可写的权限了,如果可以,呵呵,该怎么 利用就不多说了,大家就自由发挥去吧。
delete 删除远程ftp服务器上的文件。这也必须保证你有可写的权限。
bye 退出当前连接。
quit 同上。

以下是一个展示java使用tcp通讯的简单例子,包括服务器和客户端代码:
/
TCPServer
/
import javaio;
import javanet;
class TCPServer{
public static void main(String[] args)throws IOException{
ServerSocket listen = new ServerSocket(5050);

Socket server = listenaccept();
InputStream in = servergetInputStream();
OutputStream out = servergetOutputStream();
char c = (char)inread();
Systemoutprintln("收到:" + c);
outwrite('s');

outclose();
inclose();
serverclose();
listenclose();
}
}
/
TCPClient
/
import javaio;
import javanet;
class TCPClient{
public static void main(String[] args)throws IOException{
Socket client = new Socket("127001" , 5050);
InputStream in = clientgetInputStream();
OutputStream out = clientgetOutputStream();

outwrite('c');
char c = (char)inread();
Systemoutprintln("收到:" + c);
outclose();
inclose();
clientclose();
}
}

三次握手:

            1 主动发起连接请求端(客户端),发送 SYN 标志位,携带数据包、包号

            2 被动接收连接请求端(服务器),接收 SYN,回复 ACK,携带应答序列号。同时,发送SYN标志位,携带数据包、包号

            3 主动发起连接请求端(客户端),接收SYN 标志位,回复 ACK。

                        被动端(服务器)接收 ACK —— 标志着 三次握手建立完成( Accept()/Dial() 返回 )

四次挥手:

            1 主动请求断开连接端(客户端), 发送 FIN标志,携带数据包

            2 被动接受断开连接端(服务器), 发送 ACK标志,携带应答序列号。 —— 半关闭完成。

            3 被动接受断开连接端(服务器), 发送 FIN标志,携带数据包

            4 主动请求断开连接端(客户端), 发送 最后一个 ACK标志,携带应答序列号。—— 发送完成,客户端不会直接退出,等 2MSL时长。

                        等 2MSL待目的:确保服务器 收到最后一个ACK

滑动窗口:

            通知对端本地存储数据的 缓冲区容量。—— write 函数在对端 缓冲区满时,有可能阻塞。
TCP状态转换:

            1 主动发起连接请求端:

                        CLOSED ——> 发送SYN ——> SYN_SENT(了解) ——> 接收ACK、SYN,回发 ACK ——> ESTABLISHED (数据通信)

            2 主动关闭连接请求端:

                        ESTABLISHED ——> 发送FIN ——> FIN_WAIT_1 ——> 接收ACK ——> FIN_WAIT_2 (半关闭、主动端)

                        ——> 接收FIN、回复ACK ——> TIME_WAIT (主动端) ——> 等 2MSL 时长 ——> CLOSED

            3 被动建立连接请求端:

                        CLOSED ——> LISTEN ——> 接收SYN、发送ACK、SYN ——> SYN_RCVD ——> 接收 ACK ——> ESTABLISHED (数据通信)

            4 被动断开连接请求端:

                        ESTABLISHED ——> 接收 FIN、发送 ACK ——> CLOSE_WAIT ——> 发送 FIN ——> LAST_ACK ——> 接收ACK ——> CLOSED

windows下查看TCP状态转换:

            netstat -an | findstr  端口号

Linux下查看TCP状态转换:

            netstat -an | grep  端口号
TCP和UDP对比: 

            TCP: 面向连接的可靠的数据包传递。 针对不稳定的 网络层,完全弥补。ACK

            UDP:无连接不可靠的报文传输。 针对不稳定的 网络层,完全不弥补。还原网络真实状态。

                                    优点                                                             缺点

            TCP: 可靠、顺序、稳定                                      系统资源消耗大,程序实现繁复、速度慢

            UDP:系统资源消耗小,程序实现简单、速度快                          不可靠、无序、不稳定

使用场景:

            TCP:大文件、可靠数据传输。 对数据的 稳定性、准确性、一致性要求较高的场合。

            UDP:应用于对数据时效性要求较高的场合。 网络直播、电话会议、视频直播、网络游戏。

UDP-CS-Server实现流程:

            1  创建 udp地址结构 ResolveUDPAddr(“协议”, “IP:port”) ——> udpAddr 本质 struct{IP、port}

            2  创建用于 数据通信的 socket ListenUDP(“协议”, udpAddr ) ——> udpConn (socket)

            3  从客户端读取数据,获取对端的地址 udpConnReadFromUDP() ——> 返回:n,clientAddr, err

            4  发送数据包给 客户端 udpConnWriteToUDP("数据", clientAddr)

UDP-CS-Client实现流程:

            1  创建用于通信的 socket。 netDial("udp", "服务器IP:port") ——> udpConn (socket)

            2  以后流程参见 TCP客户端实现源码。

UDPserver默认就支持并发!

------------------------------------

命令行参数: 在main函数启动时,向整个程序传参。 重点

            语法: go run xxxgo   argv1 argv2  argv3  argv4 。。。

                        xxxexe:  第 0 个参数。

                        argv1 :第 1 个参数。

                        argv2 :第 2 个参数。

                        argv3 :第 3 个参数。

                        argv4 :第 4 个参数。

            使用: list := osArgs  提取所有命令行参数。

获取文件属性函数:

            osstat(文件访问绝对路径) ——> fileInfo 接口

            fileInfo 包含 两个接口。

                        Name() 获取文件名。 不带访问路径

                        Size() 获取文件大小。

网络文件传输 —— 发送端(客户端)

            1  获取命令行参数,得到文件名(带路径)filePath list := osArgs

            2  使用 osstat() 获取 文件名(不带路径)fileName

            3  创建 用于数据传输的 socket  netDial("tcp", “服务器IP+port”) —— conn

            4  发送文件名(不带路径)  给接收端, connwrite()

            5  读取 接收端回发“ok”,判断无误。封装函数 sendFile(filePath, conn) 发送文件内容

            6  实现 sendFile(filePath,  conn)

                        1) 只读打开文件 osOpen(filePath)

                                    for {

                                    2) 从文件中读数据  fRead(buf)

                                    3) 将读到的数据写到socket中  connwrite(buf[:n])

                                    4)判断读取文件的 结尾。 ioEOF 跳出循环

                                    }

网络文件传输 —— 接收端(服务器)

            1 创建用于监听的 socket netListen() —— listener

            2 借助listener 创建用于 通信的 socket listenerAccpet()  —— conn

            3 读取 connread() 发送端的 文件名, 保存至本地。

            4 回发 “ok”应答 发送端。

            5 封装函数,接收文件内容 recvFile(文件路径)

                        1) f = osCreate(带有路径的文件名)

                        for {

                        2)从 socket中读取发送端发送的 文件内容 。 connread(buf)

                        3)  将读到的数据 保存至本地文件 fWrite(buf[:n])

                        4)  判断 读取conn 结束, 代表文件传输完成。 n == 0  break

                        }
            

本模块嵌入一个TCP/IP栈。主机(即外接的控制器)可通过AT指令直接连接互联网。它可以减少对PPP和TCP/IP协议栈的依赖和最小化的消耗。本模块提供以下的套接字服务:TCP客户端,UDP客户端,TCP服务器和UDP服务器。

通过TCP/IP AT指令,主机可以配置PDP上下文,触发/吊销PDP上下文,开始/关闭套接字服务和发送/接收数据通过套接字服务。下图表明怎么使用TCP/IP AT指令:
本模块TCP/IP的AT指令包含三种类型的数据通道类型。

1缓存通道模式

2直接传递通道模式。

3透传通道模式。

当通过AT+QIOPEN开启一个套接字服务,可以通过参数<access_mode>确认数据传输模式。当套接字服务开启后,AT+QISWTMD可以被用来改变数据通道模式。

1在缓存模式中,发送数据通过AT+QISEND。当接收到数据时,模块会缓冲这个数据,然后上传一个 +QIURC:"recv",<connectID>的URC给主机。主机可通过使用AT+QIRD读取数据。说明:如果模块缓冲区不是空的,模块不会发送一个新的URC给主机,除非主机通过AT+QIRD读取所有数据。

2在直接传递模式中,发送数据通过AT+QISEND。当接收到数据,数据将会以 +QIURC:"recv",<connectID>,<currectrecvlength><CR><LF><data> 直接通过COM口发送给主机。

3在透传模式中,相对应的端口(如UART,USB解调器等)进入专有的模式(USB AT端口不支持透传模式)。模块从COM口接收到的数据直接发送到互联网上,从互联网上接收到的数据直接从COM口传输给主机。“+++”是用来退出透传模式的。当“+++”返回OK,这个模块将会切换到缓存通道模式。AT+QISWTMD可以被用来回到透传模式。说明:在透传模式中,主机不能执行AT指令。如果套接字连接因为网络错误或者其他原因关闭,模块会上传NO CARRIER给主机和退出透传模式。在这种情况,AT+QICLOSE将被执行去关闭套接字服务。

4为了退出透传模式,使用“+++”或者DTR(设置AT&D1)。为了防止“+++”被当成数据,它应该完成如下顺序:

1)在输入“+++”之前T1时间(1秒)内不要输入任何字符;

2)在输入“+++”1秒内,没有任何字符输入;

3)在输入“++++”后,1秒内不要输入任何字符;

4)返回OK,退出透传模式。

5这里有两种方式回到透传模式:

1)使用AT+QISWTMD。设置<access_mode>为2如果进入透传模式,CONNECT将会反馈。

2)使用ATO。在退出透传模式后,ATO将会改变传输模式到透传模式。如果成功,返回CONNECT,失败,返回NO CARRIER。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12988695.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-29
下一篇2025-08-29

发表评论

登录后才能评论

评论列表(0条)

    保存