为什么电脑连不上FTP?

想自己搭建一个网站,注册了一个空间,却连不上FTP,用的软件是8uFTP。

img

换其他的ftp客户端可以吗?比如filezilla.

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/219144
  • 你也可以参考下这篇文章:c语言实现ftp客户端,下载ftp的文件内容信息
  • 除此之外, 这篇博客: linux学习之旅(32)----c语言实现局域网内的文件上传和下载(模拟ftp)中的 二、项目设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 本系统是一个C/S模型,即客户端/服务器模型。

    1、服务器端设计

    服务器模型采用了多路I/O复用中的poll。选择poll的原因:

    (1)操作比select简单一些,不需要每次都传入客户机的状态。

    (2)对于局域网在的用户数量poll完全可以处理,没有必要使用epoll。

    (3)多线程是不稳定的,一旦再数据传输的过程中一个客户端出错,就可能会导致整个系统崩溃,这无疑是非常危险的。而且再linux系统中的线程并不是真正意义上的线程,而是被称为“轻量级进程”,这里就说明,在Linux系统下,线程就只是可以共享数据的进程而已。

    (4)其实是对于本系统来说,完全可以采用多进程,一:本系统目前支持32个客户,二:多线程稳定,三:各个客户端不需要交互,所以每个进程只需要负责监听自己的socket,处理自己的事务,就会使过程变得简单。但多线程的对资源的消耗过大,一旦系统需要支持更多的客户就会使得服务器的响应变慢。

    在本系统一共为用户实现了4个命令。分别是:get(下载)、put(上传)、sls(查看)、quit(退出)。

    系统在处理前三个命令都是通过frok()函数,创建出子进程,然后通过子进程去处理相应的事务,这样作的原因是基于:

    对于一些比较大的文件,文件上传(下载)可能需要一些时间才能完成,这样就会导致服务器无法相应其他客户的请求。利用进程可以避免这个问题,当子进程在传输时,父进程可以继续去监听。

    但是由于进程之间通信比较麻烦,所以就会导致下面这个问题:

    这个问题主要是体现在文件上传的时候,由于子进程进程会拷贝父进程的数据,而且各个进程之间相对独立,所以当在子进程中监听对应客户端的socket时,父进程同样也会监听,这样就会导致消息混乱(分不清数据是被那个进程接收了),这样系统就会出错。

    这里我采用的解决办法时,通过管道解决这个问题。具体操作就是在子进程准备接收数据的时候,在父进程中的poll监听队列中将该socket提出队列(即暂停对该socket的监听),等待子进程完成传输任务后,通过管道将该socket写回给父进程,在被父进程回收时,父进程通过管道对出相应的socket在恢复对它的监听。

    2、客户端设计

    在客户端启用两个进程,一个负责接收用户输入的消息,一个负责接收服务端发送的消息。这样作的原因:

    (1)因为我们无法确定用户和服务器发送数据的时间,所以不知何时该处理那个函数。

    (2)如果采用非阻塞的轮询方式,就会导致客户端的负担增大,因为需要不停的判断。

    但这样再上传文件时(在接受用户数据进程中实现)会出现一个问题:上面说过为了实现断点续传功能,系统会在检测服务器上是否存在已有的文件,并会客户端为发送文件的偏移量,但是由于接收服务器消息的功能再另一个进程中,所以就会导致该消息无法被接收到,从而导致客户端和服务器两端同时阻塞。即客户端在等待偏移量,服务在等待客户端发送数据。这里的解决方法还是通过管道,在接受服务器消息的进程接收到消息通过管道将数据发送给接收用户消息的进程。

    当用户输入数据后,客户端会对用户输入的数据进行判断,如果输入合法直接将处理后的数据发送给服务器,如果不合法就直接丢弃数据,然后返回给客户错误信息,这样以减少服务器端的压力。

    当客户端上传(下载)文件时:一般的命令,由于数据量小是通过主进程直接传输,但由于文件的数据量一般较大,所以这里再处理上传文件时,单独为此模块开个一个线程,这样用户就可以同时上传(下载)多个文件。但由于只有一个端口,所有的数据都是通过一个端口传输的,所以速度和一个一个发是差不多的,但却不是一个发完一个再发,发送的文件是随机的。

  • 您还可以看一下 路飞老师的网络文件传输协议-FTP服务详解课程中的 FTP介绍小节, 巩固相关知识点

检查ftp的端口、地址、是否启用加密连接、主动被动模式,还有ftp服务器本身是否正常
换一个电脑,换一个客户端试试看,如果确认你这没问题,那么联系网站管理员问问