c - FTP 实现 : close data socket every time

标签 c sockets ftp

我正在用 c 实现一种 FTP 协议(protocol)。

我有一个服务器在运行。 我启动客户端,连接到服务器,然后发送一个 GET file.txt 请求。 客户端解析命令,看到它是 GET 命令并启动服务器套接字。 服务端收到命令,开始与客户端的数据连接,并开始在该连接上发送file.txt。

当服务器发送文件时,它关闭客户端套接字(数据)。

当我想获取另一个文件时,该端口已被使用。我怎样才能防止这种情况?我应该为所有命令连接 session 保持数据连接打开吗?在这种情况下,我的客户如何知道文件何时结束?

谢谢

最佳答案

当一个套接字关闭时,它进入TIME WAIT状态(see here for the possible TCP states)并且在套接字离开TIME WAIT之前没有其他套接字可以绑定(bind)到相同的地址/端口对 并且处于 CLOSED 状态。

可以通过设置 SO_REUSEADDR 套接字选项来解决这个问题,如果其中一个套接字位于 TIME WAIT 状态。

关于c - FTP 实现 : close data socket every time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453666/

相关文章:

c - 为什么我的数组在将其传递到另一个函数后仍保留垃圾值/段错误?

c++ - 读取UDP广播的源地址

java - 无法通过socket android连接到服务器

R httr从ftp下载文件错误421 "too many connections from your internet address"

java - 如何从 URL 创建 commons-net FTPClient

c - 在另一个子进程写入文本文件时锁定文本文件

c - 释放非 malloc 的内存

c - 使用函数的免费双指针

c - 如何控制UDP套接字的吞吐量?

caching - 如何刷新紧急传输文件列表?