收录日期:2019/10/21 08:21:30 时间:2016/06/08 02:53:16 标签:VB.NET
Private Function createDataSocket() As Socket

   Me.sendCommand("PASV")
   If Not Me.resultCode = 227 Then
      FireException(Me.result.Substring(4))
   End If

   Dim index1 As Integer = Me.result.IndexOf("(")
   Dim index2 As Integer = Me.result.IndexOf(")")

   Dim ipData As String = Me.result.Substring(index1 + 1, index2 - index1 - 1)

   Dim parts(6) As Integer

   Dim len As Integer = ipData.Length
   Dim partCount As Integer = 0
   Dim buf As String = ""

   Dim i As Integer
   i = 0
   Do While (i < len And partCount <= 6)
      Dim ch As Char = Char.Parse(ipData.Substring(i, 1))

      If Char.IsDigit(ch) Then
         buf = buf & ch
      Else
         If ch <> "," Then
            FireException("Malformed PASV result: " & result)
         End If
      End If

      If ch = "," Or i = len - 1 Then
         Try                    
            parts(partCount) = Integer.Parse(buf)
            partCount = partCount + 1
            buf = ""
         Catch ex As Exception
            FireException("Malformed PASV result (not supported?): " & Me.result, ex)
         End Try
      End If

      i = i + 1
   Loop

   Dim ipAddress As String = parts(0) & "." & parts(1) & "." & parts(2) & "." & parts(3)

   Dim port As Int32 = Convert.ToInt32(parts(4) << 8) + Convert.ToInt32(parts(5))

   Dim socket As Socket = Nothing
   Dim ep As IPEndPoint = Nothing

   Try
      socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
      ep = New IPEndPoint(Dns.Resolve(ipAddress).AddressList(0), port)
      socket.Connect(ep)
   Catch ex As Exception
      'doubtfull....
      If (Not (socket Is Nothing) And socket.Connected) Then
         socket.Close()
      End If 
      FireException("Can't connect to remote server", ex)
   End Try

   Return socket

End Function

复杂,没看懂
这是一段C#写的FTP类,我把它改写为VB.NET。
在读取FTP服务器文件目录时,执行socket.Connect(ep)时,遇到错误:
"由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。"

经分析下来,问题可能在连接FTP服务器的模式上。
(使用AbsoultFTP和CuteFTP均可访问此服务器,它们采用的是PORT模式.)

环境:本地是局域网中的一台客户端,ADSL上网,连外网上的FTP服务器。
程序能访问局域网内的两台FTP服务器,但连外网上的FTP服务器且出现上述的错误提示(PASV模式下),
所以想用PORT模式,下面是我的PORT的使用:
====================================================
Private Function createDataSocket() As Socket

Dim strT As String
strT = "192,168,42,27,19,70"
Me.sendCommand("PORT " & strT)
If Not Me.resultCode = 200 Then
  FireException(Me.result.Substring(4))
End If

Dim ipAddress As String = Me.strServer
Dim port As Int32 = 19 * 256 + 70

Dim socket As Socket = Nothing  'null
Dim ep As IPEndPoint = Nothing  'null

Try
  socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
  ep = New IPEndPoint(Dns.Resolve(ipAddress).AddressList(0), port)
  socket.Connect(ep)
Catch ex As Exception
  'doubtfull....
  If (Not (socket Is Nothing) And socket.Connected) Then
     socket.Close()
  End If
  FireException("Can't connect to remote server", ex)
End Try

Return socket

End Sub
====================================================
但问题依旧,所以想问问看PORT是如何使用的?还是问题根本不在此处?


不会吧,一会儿又沉下去了,这个FTP的话题,就没多少人感兴趣?
自己顶

推荐几本经典的关于windows编程的书(如钩子,hook等) 怎样通过VC++6.0实现pc和pocket pc的连接?急 一个备受煎熬的程序员美眉 shtml的介绍有人知道吗?请赐教…… 诸位现在的月薪是多少呢?调查一下JAVA的工资 请问用什么播放器可以播放带ISO的文件? 如何将查询SQL回来的结果集转化成access的表,急!!! 可否实现如下这种功能 怎样通过VC++6.0实现pc和pocket pc的连接?急 有关多台电脑上网问题,解决给300分~~在线等~~ 敬请版主及高手留意:关于web services的对象传递的问题 數據庫損壞還能修復嗎 用单片机驱动短信模块,数据格式? 如何删除TStringList类型中的一行值? delphi现在最常用的数据库访问组件是什么 紧急求救????? 正则表达式问题 有什么软件可以在2000下现速的??????? 请教有关计数的不小问题?(急) 请问在ADO。NET中怎么在设置存储过程中的输入和得到输出参数? Delphi中如何实现VB的Sendkeys函数? 类型转换 奇怪,怎么会没有这个字段呢? 如何用一个按钮的形式,点击能够指向另一台电脑指定的文件夹??? 请问,怎么能让我的对话框没有边框,就象一片纸一样,谢谢了 delphi现在最常用的数据库访问组件是什么 如何用程序检索网站上的ACCESS库中是否存在指定的记录? 关于发手机短信的程序!! 关于文档保存的问题,很急! 求实现权限方法