我在本机中尝试:
port 127.0.0.1.4.0\r\n (使用1024端口)
回应200 OK!
于是:
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024); //本地数据地址连接口
m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //新建套接字
m_sock.Bind(remoteEP); //绑定本地地址端口
m_sock.Listen(1000); //开始监听
m_sock.BeginAccept(new AsyncCallback(ListenCallback), m_sock); //开始接受数据传送但我在ListenCallback(ar)函数中怎么也等不到回应?

解决方案 »

  1.   

    回应200 OK后
    控制连接还得再发一个消息,比如RETR /dir/file.ext接收文件
    或者STOR上传文件此时服务器才会主动来连接你
      

  2.   

    参考
    http://www.csharphelp.com/archives/archive9.html
      

  3.   

    谢谢Sunmast(速马)
    我还有一问题:当完成数据传送后,想断开连接时
    m_sock.Shutdown(SocketShutdown.Both);
    m_sock.Close();
    但一执行Shutdown时就弹出错误:
    "由于套接字没有连接并且 (当使用一个 sendto 调用发送数据报套接字时) 没有提供地址,发送或接收数据的请求没有被接受。"
    其实在后面我已没有数据的传出和接收了,怎么解决呢?
      

  4.   

    只有打开的socket才能关闭,否则也没有必要关闭,可以通过 socket.open 来判断连接是否已打开。sendto必须有地址参数,是用于使用UDP协议的socket之上。你使用TCP协议的话,使用socket.send()方法发送数据,而不能使用sendto()方法
    同样接受数据使用Receive()而不能使用ReceiveFrom()方法
      

  5.   

    其实我并未用到sendto()或send()(错误中却是这样描述的),我用的是异步连接通讯,现在的问题是怎样关闭一个不用的连接?
      

  6.   

    用于Listen的Socket不需要Shutdown
    直接Close就行了
      

  7.   

    Sunmast(速马),誰还能您这么有见解!