接收FTP活动模式数据连接时,Socket.Accept()方法阻塞

时间:2015-07-27 22:37:47

标签: c# sockets ftp

不确定下面的部分代码是否有帮助,但我们遇到的问题只发生在尝试将FTP数据传输到FTP服务器的一些客户端计算机上。

我们正在寻找网络跟踪并试图找到这些机器的任何独特之处。

以下是我们的代码停止的位置:=> listening_sock.Accept();

//region Try to bind to an available data port
System.Net.IPEndPoint localEP = new IPEndPoint(IPAddress.Parse(sIPAddr), (dataPortStart == 0 ? 0 : GetFreePort(dataPortStart, dataPortEnd)));
listening_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listening_sock.Bind(localEP);
Log.WriteLine("Listening sock bound to IP Address:" + localEP.Address.ToString() + " on port " + localEP.Port.ToString());

//port 20
if (data_sock != null)      // already connected (always so if passive mode)
return;

data_sock = listening_sock.Accept();    // Accept is blocking
listening_sock.Close();
listening_sock = null;

这里我们可以看到send port命令成功(Active FTP)但服务器响应425:

enter image description here

我最好的选择是防火墙。我也在检查。

谢谢

1 个答案:

答案 0 :(得分:0)

默认情况下会创建Socket阻止。所以Socket.Accept确实应该阻塞,直到收到连接请求。

我认为问题不在代码中,但请求实际上没有,因为:

  • 被防火墙阻止
  • 或者您配置了错误的NAT
  • 或者您向服务器提供了错误的IP地址或端口号。