我正在用 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/