Richard,
I use this code every day in several apps and it works fine.
Can you provide a sample address or something I can test against that is
giving you problems?
"RichardC" <RichardC@discussions.microsoft.com> wrote in message
news:C2E457C4-5A4D-425E-A5FE-AE5C8045326A@microsoft.com:[color=blue]
> Scorpion,
>
> Thanks for trying but what you submitted looks EXACTLY like the sample Jen
>
> submitted - and is the same as mine, taken from:
>
http://www.devcity.net/forums/topic.asp?tid=72390
> which is based on the MS code provided on the MS Support site.
>
> The problem seems to occur in the Create Data Socket procedure where it
> says
> (the 2nd time):
> ep = New IPEndPoint(Dns.Resolve(ipAddress).AddressList(0), port)
> s.Connect(ep)
>
> There is an error in the creation of the Endpoint, which probably explains
>
> why s.Connect doesn't work. If you have any ideas, I would appreciate
> them.
>
> Thanks, Richard
>
>
> "scorpion53061" wrote:
>[color=green]
> > This class is FTP.
> >
> > I hope it will help you and others.
> >
> > Imports System.Net
> >
> > Imports System
> >
> > Imports System.IO
> >
> > Imports System.Text
> >
> > Imports System.Net.Sockets
> > Public Class clsFTP
> >
> > #Region "Main Class Variable Declarations"
> >
> > Private m_sRemoteHost, m_sRemotePath, m_sRemoteUser As String
> >
> > Private m_sRemotePassword, m_sMess As String
> >
> > Private m_iRemotePort, m_iBytes As Int32
> >
> > Private m_objClientSocket As Socket
> >
> > Private m_iRetValue As Int32
> >
> > Private m_bLoggedIn As Boolean ' Change to loggedIn
> >
> > Private m_sMes, m_sReply As String
> >
> > Private FilePath As String
> >
> >
> > ' Set the size of the packet that is used to read and
> >
> > ' write data to the FTP Server to the spcified size below.
> >
> > Public Const BLOCK_SIZE = 512
> >
> > Private m_aBuffer(BLOCK_SIZE) As Byte
> >
> > Private ASCII As Encoding = Encoding.ASCII
> >
> > ' General variables
> >
> > Private m_sMessageString As String
> >
> > #End Region
> >
> > #Region "Class Constructors"
> >
> > '
> >
> > ' Main class constructor.
> >
> > Public Sub New()
> >
> > m_sRemoteHost = "10.10.10.10"
> >
> > m_sRemotePath = "."
> >
> > m_sRemoteUser = "username"
> >
> > m_sRemotePassword = "password"
> >
> > m_sMessageString = ""
> >
> > m_iRemotePort = 21
> >
> > m_bLoggedIn = False
> >
> > End Sub
> >
> > ' Parametized constructor.
> >
> > Public Sub New(ByVal sRemoteHost As String, ByVal sRemotePath As
> > String, ByVal sRemoteUser As String, ByVal sRemotePassword As String,
> > ByVal iRemotePort As Int32)
> >
> > m_sRemoteHost = sRemoteHost
> >
> > m_sRemotePath = sRemotePath
> >
> > m_sRemoteUser = sRemoteUser
> >
> > m_sRemotePassword = sRemotePassword
> >
> > m_sMessageString = ""
> >
> > m_iRemotePort = iRemotePort
> >
> > m_bLoggedIn = False
> >
> > End Sub
> >
> > #End Region
> >
> > #Region "Public Properties"
> >
> > '
> >
> > ' Set/Get the name of the FTP Server.
> >
> > Public Property RemoteHost() As String
> >
> > Get
> >
> > Return m_sRemoteHost
> >
> > End Get
> >
> > Set(ByVal Value As String)
> >
> > m_sRemoteHost = Value
> >
> > End Set
> >
> > End Property
> >
> > ' Set/Get the FTP Port Number.
> >
> > Public Property RemotePort() As Int32
> >
> > Get
> >
> > Return m_iRemotePort
> >
> > End Get
> >
> > Set(ByVal Value As Int32)
> >
> > m_iRemotePort = Value
> >
> > End Set
> >
> > End Property
> >
> > ' Set/Get the remote path.
> >
> > Public Property RemotePath() As String
> >
> > Get
> >
> > Return m_sRemotePath
> >
> > End Get
> >
> > Set(ByVal Value As String)
> >
> > m_sRemotePath = Value
> >
> > End Set
> >
> > End Property
> >
> > ' Set the remote password.
> >
> > Public Property RemotePassword() As String
> >
> > Get
> >
> > Return m_sRemotePassword
> >
> > End Get
> >
> > Set(ByVal Value As String)
> >
> > m_sRemotePassword = Value
> >
> > End Set
> >
> > End Property
> >
> > ' Set/Get the remote user.
> >
> > Public Property RemoteUser() As String
> >
> > Get
> >
> > Return m_sRemoteUser
> >
> > End Get
> >
> > Set(ByVal Value As String)
> >
> > m_sRemoteUser = Value
> >
> > End Set
> >
> > End Property
> >
> > ' Set the class messagestring.
> >
> > Public Property MessageString() As String
> >
> > Get
> >
> > Return m_sMessageString
> >
> > End Get
> >
> > Set(ByVal Value As String)
> >
> > m_sMessageString = Value
> >
> > End Set
> >
> > End Property
> >
> > #End Region
> >
> > #Region "Public Subs and Functions"
> >
> > '
> >
> > ' Return a list of files within a string() array from the
> >
> > ' file system.
> >
> > Public Function GetFileList(ByVal sMask As String) As String()
> > MsgBox(sMask)
> >
> > Dim cSocket As Socket
> >
> > Dim bytes As Int32
> >
> > Dim seperator As Char = ControlChars.Lf
> >
> > Dim mess() As String
> >
> > m_sMes = ""
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > cSocket = CreateDataSocket()
> >
> > 'SendCommand("{ls -ls}")
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > m_sMes = ""
> >
> > Do While (True)
> >
> > m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
> >
> > bytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0)
> >
> > m_sMes += ASCII.GetString(m_aBuffer, 0, bytes)
> >
> > If (bytes < m_aBuffer.Length) Then
> >
> > Exit Do
> >
> > End If
> >
> > Loop
> >
> > mess = m_sMes.Split(seperator)
> >
> > cSocket.Close()
> >
> > ReadReply()
> >
> > If (m_iRetValue <> 226) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > Return mess
> >
> > End Function
> >
> > '
> >
> > ' Get the size of the file on the FTP Server.
> >
> > Public Function GetFileSize(ByVal sFileName As String) As Long
> >
> > Dim size As Long
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("SIZE " & sFileName)
> >
> > size = 0
> >
> > If (m_iRetValue = 213) Then
> >
> > size = Int64.Parse(m_sReply.Substring(4))
> >
> > Else
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > Return size
> >
> > End Function
> >
> > Public Function GetFileDate(ByVal sFileName As String) As DateTime
> > If (Not (m_bLoggedIn)) Then
> > Login()
> > End If
> > SendCommand("MDTM " & sFileName)
> > Dim filepath As String = Me.m_sReply
> > Dim num2 As Integer = CInt(filepath.Substring(4, 4))
> > Dim num3 As Integer = CInt(filepath.Substring(8, 2))
> > Dim num4 As Integer = CInt(filepath.Substring(10, 2))
> > Dim num5 As Integer = CInt(filepath.Substring(12, 2))
> > Dim num6 As Integer = CInt(filepath.Substring(14, 2))
> > returnedfiledate = DateTime.Parse(num3 & "/" & num4 & "/" & num2
> >
> > & " " & num5 & ":" & num6)
> > Return returnedfiledate
> > End Function
> >
> >
> >
> > ' Log into the FTP Server.
> >
> > Public Function Login() As Boolean
> >
> > m_objClientSocket = New Socket(AddressFamily.InterNetwork,
> > SocketType.Stream, ProtocolType.Tcp)
> >
> > Dim ep As New
> > IPEndPoint(Dns.Resolve(m_sRemoteHost).AddressList( 0), m_iRemotePort)
> >
> > Try
> >
> > m_objClientSocket.Connect(ep)
> >
> > Catch ex As Exception
> >
> > MessageString = m_sReply
> >
> > Throw New IOException("Couldn't connect to remote server")
> >
> > End Try
> >
> > ReadReply()
> >
> > If (m_iRetValue <> 220) Then
> >
> > CloseConnection()
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > SendCommand("USER " & m_sRemoteUser)
> >
> > If (Not (m_iRetValue = 331 Or m_iRetValue = 230)) Then
> >
> > Cleanup()
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > If (m_iRetValue <> 230) Then
> >
> > SendCommand("PASS " & m_sRemotePassword)
> >
> > If (Not (m_iRetValue = 230 Or m_iRetValue = 202)) Then
> >
> > Cleanup()
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > End If
> >
> > m_bLoggedIn = True
> >
> > ChangeDirectory(m_sRemotePath)
> >
> > ' Return the end result.
> >
> > Return m_bLoggedIn
> >
> > End Function
> >
> > '
> >
> > ' If the value of mode is true, set binary mode for
> >
> > ' downloads.
> >
> > ' Else, set Ascii mode.
> >
> > Public Sub SetBinaryMode(ByVal bMode As Boolean)
> >
> > If (bMode) Then
> >
> > SendCommand("TYPE I")
> >
> > Else
> >
> > SendCommand("TYPE A")
> >
> > End If
> >
> > If (m_iRetValue <> 200) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > End Sub
> >
> > '
> >
> > ' Download a file to the Assembly's local directory,
> >
> > ' keeping the same file name.
> >
> > Public Sub DownloadFile(ByVal sFileName As String)
> >
> > DownloadFile(sFileName, "", False)
> >
> > End Sub
> >
> > '
> >
> > ' Download a remote file to the Assembly's local
> >
> > ' directory, keeping the same file name, and set
> >
> > ' the resume flag.
> >
> > Public Sub DownloadFile(ByVal sFileName As String, ByVal bResume As
> >
> > Boolean)
> >
> > DownloadFile(sFileName, "", bResume)
> >
> > End Sub
> >
> > '
> >
> > ' Download a remote file to a local file name which can
> >
> > ' include a path. The local file name will be created or
> >
> > ' overwritten, but the path must exist.
> >
> > Public Sub DownloadFile(ByVal sFileName As String, ByVal
> > sLocalFileName As String)
> >
> > DownloadFile(sFileName, sLocalFileName, False)
> >
> > End Sub
> >
> > '
> >
> > ' Download a remote file to a local file name which can
> >
> > ' include a path, and set the resume flag. The local file
> >
> > ' name will be created or overwritten, but the path must
> >
> > ' exist.
> >
> > Public Sub DownloadFile(ByVal sFileName As String, ByVal
> > sLocalFileName As String, ByVal bResume As Boolean)
> >
> > Dim st As Stream
> >
> > Dim output As FileStream
> >
> > Dim cSocket As Socket
> >
> > Dim offset, npos As Long
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SetBinaryMode(True)
> >
> > If (sLocalFileName.Equals("")) Then
> >
> > sLocalFileName = sFileName
> >
> >
> > End If
> >
> > If (Not (File.Exists(sLocalFileName))) Then
> >
> > st = File.Create(sLocalFileName)
> >
> >
> > st.Close()
> >
> > End If
> >
> > output = New FileStream(sLocalFileName, FileMode.Open)
> >
> > cSocket = CreateDataSocket()
> >
> > offset = 0
> >
> > If (bResume) Then
> >
> > offset = output.Length
> >
> > If (offset > 0) Then
> >
> > SendCommand("REST " & offset)
> >
> > If (m_iRetValue <> 350) Then
> >
> > 'throw new IOException(reply.Substring(4));
> >
> > 'Some servers may not support resuming.
> >
> > offset = 0
> >
> > End If
> >
> > End If
> >
> > If (offset > 0) Then
> >
> > npos = output.Seek(offset, SeekOrigin.Begin)
> >
> > End If
> >
> > End If
> >
> > SendCommand("RETR " & sFileName)
> >
> > If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > Do While (True)
> >
> > m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
> >
> > m_iBytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0)
> >
> > output.Write(m_aBuffer, 0, m_iBytes)
> >
> > If (m_iBytes <= 0) Then
> >
> > Exit Do
> >
> > End If
> >
> > Loop
> >
> > output.Close()
> >
> > If (cSocket.Connected) Then
> >
> > cSocket.Close()
> >
> > End If
> >
> > ReadReply()
> >
> > If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > End Sub
> >
> > '
> >
> > ' Upload a file.
> >
> > Public Sub UploadFile(ByVal sFileName As String)
> >
> > UploadFile(sFileName, False)
> >
> > End Sub
> >
> > '
> >
> > ' Upload a file and set the resume flag.
> >
> > Public Sub UploadFile(ByVal sFileName As String, ByVal bResume As
> > Boolean)
> >
> > Dim cSocket As Socket
> >
> > Dim offset As Long
> >
> > Dim input As FileStream
> >
> > Dim bFileNotFound As Boolean
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > cSocket = CreateDataSocket()
> >
> > offset = 0
> >
> > If (bResume) Then
> >
> > Try
> >
> > SetBinaryMode(True)
> >
> > offset = GetFileSize(sFileName)
> >
> > Catch ex As Exception
> >
> > offset = 0
> >
> > End Try
> >
> > End If
> >
> > If (offset > 0) Then
> >
> > SendCommand("REST " & offset)
> >
> > If (m_iRetValue <> 350) Then
> >
> > 'throw new IOException(reply.Substring(4));
> >
> > 'Remote server may not support resuming.
> >
> > offset = 0
> >
> > End If
> >
> > End If
> >
> > SendCommand("STOR " & Path.GetFileName(sFileName))
> >
> > If (Not (m_iRetValue = 125 Or m_iRetValue = 150)) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > ' Check to see if the file exists before the upload.
> >
> > bFileNotFound = False
> >
> > If (File.Exists(sFileName)) Then
> >
> > ' Open input stream to read source file
> >
> > input = New FileStream(sFileName, FileMode.Open)
> >
> > If (offset <> 0) Then
> >
> > input.Seek(offset, SeekOrigin.Begin)
> >
> > End If
> >
> > ' Upload the file
> >
> > m_iBytes = input.Read(m_aBuffer, 0, m_aBuffer.Length)
> >
> > Do While (m_iBytes > 0)
> >
> > cSocket.Send(m_aBuffer, m_iBytes, 0)
> >
> > m_iBytes = input.Read(m_aBuffer, 0, m_aBuffer.Length)
> >
> > Loop
> >
> > input.Close()
> >
> > Else
> >
> > bFileNotFound = True
> >
> > End If
> >
> > If (cSocket.Connected) Then
> >
> > cSocket.Close()
> >
> > End If
> >
> > ' No point in reading the return value if the file was
> >
> > ' not found.
> >
> > If (bFileNotFound) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException("The file: " & sFileName & " was not
> >
> > found. Can not upload the file to the FTP Site.")
> >
> > End If
> >
> > ReadReply()
> >
> > If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > End Sub
> >
> > '
> >
> > ' Delete a file from the remote FTP server.
> >
> > Public Function DeleteFile(ByVal sFileName As String) As Boolean
> >
> > Dim bResult As Boolean
> >
> > bResult = True
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("DELE " & sFileName)
> >
> > If (m_iRetValue <> 250) Then
> >
> > bResult = False
> >
> > MessageString = m_sReply
> >
> > End If
> >
> > ' Return the final result.
> >
> > Return bResult
> >
> > End Function
> >
> > '
> >
> > ' Rename a file on the remote FTP server.
> >
> > Public Function RenameFile(ByVal sOldFileName As String, ByVal
> > sNewFileName As String) As Boolean
> >
> > Dim bResult As Boolean
> >
> > bResult = True
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("RNFR " & sOldFileName)
> >
> > If (m_iRetValue <> 350) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > ' known problem
> >
> > ' rnto will not take care of existing file.
> >
> > ' i.e. It will overwrite if newFileName exist
> >
> > SendCommand("RNTO " & sNewFileName)
> >
> > If (m_iRetValue <> 250) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > Return bResult
> >
> > End Function
> >
> > '
> >
> > ' Create a directory on the remote FTP server.
> >
> > Public Function CreateDirectory(ByVal sDirName As String) As
> > Boolean
> >
> > Dim bResult As Boolean
> >
> > bResult = True
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("MKD " & sDirName)
> >
> > If (m_iRetValue <> 257) Then
> >
> > bResult = False
> >
> > MessageString = m_sReply
> >
> > End If
> >
> > ' Return the final result.
> >
> > Return bResult
> >
> > End Function
> >
> > '
> >
> > ' Delete a directory on the remote FTP server.
> >
> > Public Function RemoveDirectory(ByVal sDirName As String) As
> > Boolean
> >
> > Dim bResult As Boolean
> >
> > bResult = True
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("RMD " & sDirName)
> >
> > If (m_iRetValue <> 250) Then
> >
> > bResult = False
> >
> > MessageString = m_sReply
> >
> > End If
> >
> > ' Return the final result.
> >
> > Return bResult
> >
> > End Function
> >
> > '
> >
> > ' Change the current working directory on the remote FTP
> >
> > ' server.
> >
> > Public Function ChangeDirectory(ByVal sDirName As String) As
> > Boolean
> >
> > Dim bResult As Boolean
> >
> > bResult = True
> >
> > If (sDirName.Equals(".")) Then
> >
> > Exit Function
> >
> > End If
> >
> > If (Not (m_bLoggedIn)) Then
> >
> > Login()
> >
> > End If
> >
> > SendCommand("CWD " & sDirName)
> >
> > If (m_iRetValue <> 250) Then
> >
> > bResult = False
> >
> > MessageString = m_sReply
> >
> > End If
> >
> > Me.m_sRemotePath = sDirName
> >
> > ' Return the final result.
> >
> > Return bResult
> >
> > End Function
> >
> > '
> >
> > ' Close the FTP connection.
> >
> > Public Sub CloseConnection()
> >
> > If (Not (m_objClientSocket Is Nothing)) Then
> >
> > SendCommand("QUIT")
> >
> > End If
> >
> > Cleanup()
> >
> > End Sub
> >
> > #End Region
> >
> > #Region "Private Subs and Functions"
> >
> > '
> >
> > ' Read the reply from the FTP Server
> >
> > Private Sub ReadReply()
> >
> > m_sMes = ""
> >
> > m_sReply = ReadLine()
> > FilePath = m_sReply
> > m_iRetValue = Int32.Parse(m_sReply.Substring(0, 3))
> >
> > End Sub
> >
> > '
> >
> > ' Clean up some variables.
> >
> > Private Sub Cleanup()
> >
> > If Not (m_objClientSocket Is Nothing) Then
> >
> > m_objClientSocket.Close()
> >
> > m_objClientSocket = Nothing
> >
> > End If
> >
> > m_bLoggedIn = False
> >
> > End Sub
> >
> > '
> >
> > ' Read a line from the server.
> >
> > Private Function ReadLine(Optional ByVal bClearMes As Boolean =
> > False) As String
> >
> > Dim seperator As Char = ControlChars.Lf
> >
> > Dim mess() As String
> >
> > If (bClearMes) Then
> >
> > m_sMes = ""
> >
> > End If
> >
> > Do While (True)
> >
> > m_aBuffer.Clear(m_aBuffer, 0, BLOCK_SIZE)
> >
> > m_iBytes = m_objClientSocket.Receive(m_aBuffer,
> > m_aBuffer.Length, 0)
> >
> > m_sMes += ASCII.GetString(m_aBuffer, 0, m_iBytes)
> >
> > If (m_iBytes < m_aBuffer.Length) Then
> >
> > Exit Do
> >
> > End If
> >
> > Loop
> >
> > mess = m_sMes.Split(seperator)
> >
> > If (m_sMes.Length > 2) Then
> >
> > m_sMes = mess(mess.Length - 2)
> >
> > Else
> >
> > m_sMes = mess(0)
> >
> > End If
> >
> > If (Not (m_sMes.Substring(3, 1).Equals(" "))) Then
> >
> > Return ReadLine(True)
> >
> > End If
> >
> > Return m_sMes
> >
> > End Function
> >
> > '
> >
> > ' Send a command to the FTP Server.
> >
> > Private Sub SendCommand(ByVal sCommand As String)
> >
> > sCommand = sCommand & ControlChars.CrLf
> >
> > Dim cmdbytes As Byte() = ASCII.GetBytes(sCommand)
> >
> > m_objClientSocket.Send(cmdbytes, cmdbytes.Length, 0)
> >
> > ReadReply()
> >
> > End Sub
> >
> > '
> >
> > ' Create a Data socket.
> >
> > Private Function CreateDataSocket() As Socket
> >
> > Dim index1, index2, len As Int32
> >
> > Dim partCount, i, port As Int32
> >
> > Dim ipData, buf, ipAddress As String
> >
> > Dim parts(6) As Int32
> >
> > Dim ch As Char
> >
> > Dim s As Socket
> >
> > Dim ep As IPEndPoint
> >
> > SendCommand("PASV")
> >
> > If (m_iRetValue <> 227) Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException(m_sReply.Substring(4))
> >
> > End If
> >
> > index1 = m_sReply.IndexOf("(")
> >
> > index2 = m_sReply.IndexOf(")")
> >
> > ipData = m_sReply.Substring(index1 + 1, index2 - index1 - 1)
> >
> > len = ipData.Length
> >
> > partCount = 0
> >
> > buf = ""
> >
> > For i = 0 To ((len - 1) And partCount <= 6)
> >
> > ch = Char.Parse(ipData.Substring(i, 1))
> >
> > If (Char.IsDigit(ch)) Then
> >
> > buf += ch
> >
> > ElseIf (ch <> ",") Then
> >
> > MessageString = m_sReply
> >
> > Throw New IOException("Malformed PASV reply: " &
> > m_sReply)
> >
> > End If
> >
> > If ((ch = ",") Or (i + 1 = len)) Then
> >
> > Try
> >
> > parts(partCount) = Int32.Parse(buf)
> >
> > partCount += 1
> >
> > buf = ""
> >
> > Catch ex As Exception
> >
> > MessageString = m_sReply
> >
> > Throw New IOException("Malformed PASV reply: " &
> > m_sReply)
> >
> > End Try
> >
> > End If
> >
> > Next
> >
> > ipAddress = parts(0) & "." & parts(1) & "." & parts(2) & "." &
> >
> > parts(3)
> >
> > ' Make this call in VB.NET 2002. We would like to
> >
> > ' bitshift the number by 8 bits, so in VB.NET 2002 we
> >
> > ' multiply the number by 2 to the power of 8.
> >
> > 'port = parts(4) * (2 ^ 8)
> >
> > ' Make this call and comment out the above line for
> >
> > ' VB.NET 2003.
> >
> > port = parts(4) << 8
> >
> > ' Determine the data port number.
> >
> > port = port + parts(5)
> >
> > s = New Socket(AddressFamily.InterNetwork, SocketType.Stream,
> > ProtocolType.Tcp)
> >
> > ep = New IPEndPoint(Dns.Resolve(ipAddress).AddressList(0),
> > port)
> >
> > Try
> > s.Connect(ep)
> >
> > Catch ex As Exception
> >
> > MessageString = m_sReply
> > MsgBox(ex.ToString)
> >
> > Throw New IOException("Can't connect to remote server")
> >
> > End Try
> >
> > Return s
> >
> > End Function
> >
> > #End Region
> >
> > End Class
> >
> >
> > "RichardC" <RichardC@discussions.microsoft.com> wrote in message
> > news:96FD49CE-566E-42B0-A08F-14199AA03F46@microsoft.com:[color=darkred]
> > > Jen,
> > >
> > > Is it working? I have the same problem - in the MS app, an error comes
> > > up
> > >
> > > when trying to create a data socket (your given code). I manage to
> > > trace
> > > it
> > > to one of two causes: the target machine actively refusing connection,
> > > or
> > >
> > > just taking too long to respond. For some reason, the error returned
> > > is
> > > the
> > > more general (and vague)
> > > "Cannot connect to remote server". Damn irritating.
> > >
> > > But I've tried it with four different FTP sites having verified
> > > usernames
> > >
> > > and passwords and no-go. Unlikely that all four server names are
> > > changing.
> > > So
> > > if you have since figured it out, I'd appreciate you letting me know
> > > any
> > >
> > > discoveries you've since made.
> > >
> > > Cheers, Richard
> > >
> > > PS! Is the "dim the lights" msg your own or an advertising blurb?
> > >
> > > "Jen" wrote:
> > >
> > > > I think I have it working (so far anyway). It wasn't the code at
> > > > all
> > > > - it was the server I was connecting to. Unbeknownst to me,
> > > > comcast
> > > > had changed the name of their FTP servers from
> > > > "mywebpages.comcast.net" to "upload.comcast.net". Evidently it's
> > > > still a work in progress, as the "mywebpages" server will still
> > > > come
> > > > up for directory functions, but won't allow me tp upload.
> > > >
> > > > Thanks to everyone that tried to help, I do appreciate it!
> > > >
> > > >
> > > >
> > > >
> > > > (please send all replies via the newsgroup)
> > > >
> > > > Dim the Lights & Save the Stars:
> > > >
http://www.darksky.org/
> > > >[/color]
> >
> >[/color][/color]