【问题标题】:FTP clients cannot talk to TCP server I have implementedFTP 客户端无法与我实现的 TCP 服务器通信
【发布时间】:2015-02-19 18:04:51
【问题描述】:

我正在实现我自己的 TCP 服务器。到目前为止,我可以建立一个连接,效果很好,我可以连接到任何客户端。但是,当我想从客户端发送或接收消息时,它会出错。以下是我服务器最后一部分的 sn-p,我想将消息 WeLcOmE 发送到我的客户端(我使用 C 编程语言和 Linux 作为操作系统):

// Accept a connection request
int clientAddress =  sizeof(client_address); 
int new_socket = accept(door_socket, (struct sockaddr *) &client_address,    
&clientAddress);
if (new_socket < 0) 
    perror("ERROR on accept");

// Receive data from socket, send data to socket
char buff[8] = "WeLcOmE";
send(new_socket, buff, sizeof(buff), 0);

// Close socket 
close(new_socket);
close(door_socket);
return 0;
  • 使用 Filezilla 客户端运行我的服务器,这就是我得到的结果:

状态:正在解析ubuntu的地址
状态:正在连接到 127.0.1.1:3471...
状态:已建立连接,等待欢迎消息...
回复:欢迎
错误:无法连接到服务器
状态:等待重试...
状态:ubuntu的解析地址
状态:正在连接到 127.0.1.1:3471...
状态:连接尝试失败,出现“ECONNREFUSED - 连接 被服务器拒绝”。
错误:无法连接到服务器

  • 使用 ftp Linux 内置客户端运行我的服务器,我得到:

ftp> WeLcOmE421 服务不可用远程服务器已关闭连接

我不明白为什么会这样。任何帮助表示赞赏。

【问题讨论】:

  • FileZilla 日志清楚地显示它收到了“WeLcOmE”消息。然后您的代码关闭连接套接字和主监听套接字并从函数返回。你期待会发生什么?
  • 哎哟!您可能希望对send 的返回值添加一些错误检查。是什么让您认为服务器会接受"WeLcOmE" 的消息?例如,如果您将其发送到 http 服务器,您认为会“提供”什么样的响应或内容?

标签: c linux sockets tcp ftp


【解决方案1】:

正如您自己所说,您已经实现了一个“TCP”服务器。服务器所做的只是将“WeLcOmE”字符串发送到任何连接到服务器的 TCP 客户端。

如果您使用 FTP 客户端连接到服务器,客户端会获取“WeLcOmE”字符串,并且由于不符合 FTP 协议规范,客户端会出错。

如果您与任何其他使用特定协议的客户端连接,也会发生同样的情况,例如Web 浏览器 [HTTP]、终端客户端 [SSH 或 Telnet] 等。

现在的问题是,您要实现什么目标:

  • 要么你想实现一个 FTP 服务器。为此,您需要阅读 FTP 规范并根据它实现您的服务器。这是一项艰巨的任务,一般来说你不想这样做。您最好采用现有的实现。一个 FTP 服务器库并在其上构建您的自定义 FTP 服务器。或者采用完整的开源 FTP 服务器并根据您的需要对其进行自定义。
  • 或者您只是在玩弄您的玩具 TCP 服务器并想对其进行测试。为此,请使用任何可以通过从套接字读取并仅显示其获得的内容以“原始”模式工作的 TCP 客户端,而无需尝试以任何方式解释数据。您可以在“原始”连接模式下使用PuTTY。请参阅 PuTTY 文档中的 Making raw TCP connections 部分。

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2023-03-18
    • 2016-02-15
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多