titbasoft
دوشنبه 26 بهمن 1383, 20:17 عصر
با سلام
من می خواستم از روی یک ftp با استفاده از proxy یک فایل رو download کنم . هدفم از این کار اینه که من از اینترنت بی سیم استفاده می کنم و در این نوع اینترنت ارسال دیتا از طریق دیش و با ست کردن یک proxy و userID و password مخصوص به آن انجام میگیره و دریافت اطلاعات هم از طریق dial-up پس برای download یک فایل حجیم از روی ftp نیاز به یک کد دارم.
حالا اگر با استفاده از proxy هم نشد اشکالی نداره فقط می خوام مراحل انتقال دیتا رو از login کردن گرفته تا ارسال دستورات ftp و صبر کردن برای گرفتن response و نحوه دریافت اطلاعات رو بدونم.
:گیج:
با تشکر از تمامی دوستان
:wink:
ehsan707
چهارشنبه 28 بهمن 1383, 11:07 صبح
چه راحت فقط یه کمی سخت
دوست عزیز شما میتونی کد بنویسی و یا از کامپوننت استفاده کنی
شکل کلی کار اینجوریه که باید پورت 21 رو باز کمی و پیامها رو بفرستی و به سوکت گوش کنی
اگه خواستی بشیتر توضیخ بدم
titbasoft
چهارشنبه 28 بهمن 1383, 13:16 عصر
احسان جان ممنون از جوابت .
ولی یه ذره زیر دیپلم ترش کن البته کلیات رو فهمیدم و این روش رو هم خودم می دونم ولی مشکل همون قسمت یکمی سختشه :cry: یعنی اینکه چطوری login کنم یا پورت رو باز کنم یا ftp command ها رو بفرستم . البته با msInet.ocx توی vb 6 یه کم قدیما کار کردم ولی می دونم جلوی networking دات نت باید بره لونگ بندازه.
حالا اگر component مجانی هم جایی سراغ دارید بازم کار ما رو راه می ندازه.
بازم مرسی :wink:
ehsan707
چهارشنبه 28 بهمن 1383, 17:11 عصر
زیاد مشکل نیست خودت هم میتونی بنویسی
من یه مثال برای برنامه
whois
توی این تالار گذاشتم کمی به کد ها نگاه کنی شاید مطلب رو بفهمی وقت کنم یه مثال برای تو هم میگدارم
کامپوننت رو هم در آدرس زیر پیدا کن
component spot
titbasoft
چهارشنبه 28 بهمن 1383, 19:48 عصر
آقا احسان componetspot که خیلی حال داد. و فکر کنم کارم رو راه میندازه. :موفق:
اما اگه زحمت نیست بدم نمیاد که کم کد نویسیش رو هم بدونم :cry:
تازه چند تا component دیگه هم توش پیدا کردم که اونها هم باعث شادی روح امت اسلام شد
:wink:
مرسی
ehsan707
پنج شنبه 29 بهمن 1383, 16:35 عصر
من هم بسیار مشعوف شدم که روح امت اسلام شاد شد الحمدالله
خوب حالا واسه کد نویسی کمر بندها را سفت کنید
اول باید کمی کلاس بگذاری یا بسازی
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.ASCIIEncoding
Imports System.Net.Sockets
Imports System.Configuration
Imports System.Resources
Public Class FtpClient
Private FRemoteHost As String = "127.0.0.1"
Private FRemotePath As String = "."
Private FRemoteUser As String = "anonymous"
Private FRemotePassword As String = "anonymous@nowhere.com"
Private FRemotePort As Integer = 21
Private clientSocket As Socket = Nothing
Private response As String
Public Sub New()
End Sub
Public Sub New(ByVal remoteHost As String, ByVal remotePath _
As String, _
ByVal remoteUser As String, ByVal remotePassword As String, _
ByVal remotePort As Integer)
FRemoteHost = remoteHost
FRemotePath = remotePath
FRemoteUser = remoteUser
FRemotePassword = remotePassword
FRemotePort = remotePort
End Sub
Public Sub Connect()
clientSocket = New Socket(AddressFamily.InterNetwork, _
SocketType.Stream, ProtocolType.Tcp)
Dim endpoint As IPEndPoint = _
New IPEndPoint(Dns.Resolve(FRemoteHost).AddressList(0) , _
FRemotePort)
Try
clientSocket.Connect(endpoint)
Catch ex As Exception
Throw New IOException("Connect failed", ex)
End Try
ReadResponse()
End Sub
روش کار همونیه که گفتم
Private Sub ReadResponse()
Dim reply As String = ReadLine()
'Figure out the response and raise that event
BroadcastResponse(reply)
End Sub
Private Function ReadLine() As String
Return ReadLine(False)
End Function
Private Function ReadLine(ByVal clearResponse As Boolean) _
As String
Const EndLine As Char = "\n"
Const BUFFER_SIZE As Integer = 512
Dim data As String = ""
Dim buffer(BUFFER_SIZE) As Byte
Dim bytesRead As Integer = 0
If (clearResponse = True) Then response = String.Empty
While (True)
Array.Clear(buffer, 0, BUFFER_SIZE)
bytesRead = clientSocket.Receive(buffer, _
buffer.Length, 0)
data += ASCII.GetString(buffer, 0, bytesRead)
If (bytesRead < buffer.Length) Then Exit While
End While
Dim parts() As String = data.Split(EndLine)
If (parts.Length > 2) Then
response = parts(parts.Length - 2)
Else
response = parts(0)
End If
If (response.Substring(3, 1).Equals(" ") = False) Then
Return ReadLine(False)
End If
Return response
End Function
یعنی یک تابع فرمان را از سرور ftp میخواند (ان شاالله)
در اینجا هم یک رویداد به حول و قوه الهی ایجاد میکنیم
Private Sub BroadcastResponse(ByVal reply As String)
' Permit handling as raw data
RaiseEvent OnRawDataReceivedEvent(Me, _
New RawDataReceivedEventArgs(reply))
Dim code As Integer = Int32.Parse(reply.Substring(0, 3))
Dim data As String = reply.Substring(4)
' Permit special handling as code and data
RaiseEvent OnTcpEvent(Me, New TcpEventArgs(code, data))
' Specific handling based on code
Select Case code
Case SENDING_DATA_PORT_20
Case COMMAND_NOT_IMPLEMENTED
Case CONNECTED
RaiseEvent OnConnectionEvent(Me, _
New ConnectionEventArgs(True, code, data))
Case AUTHENTICATED
RaiseEvent OnAuthentication(Me, _
New AuthenticationEventArgs(True, code, data))
Case NEED_PASSWORD
Case AUTHENTICATION_FAILED
RaiseEvent OnAuthentication(Me, _
New AuthenticationEventArgs(False, code, data))
End Select
End Sub
خوب توجه بفرمایید که ما یک کلاس خاص را در دات نت استفاده فرمودیم (البته با توفیقات امام زمان)
در اینجا داریم
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.ASCIIEncoding
Imports System.Net.Sockets
Imports System.Configuration
Imports System.Resources
Public Class FtpClient
Public Shared ReadOnly SENDING_DATA_PORT_20 As Integer = 150
Public Shared ReadOnly COMMAND_NOT_IMPLEMENTED As Integer = 202
Public Shared ReadOnly CONNECTED As Integer = 220
Public Shared ReadOnly AUTHENTICATED As Integer = 230
Public Shared ReadOnly NEED_PASSWORD As Integer = 331
Public Shared ReadOnly AUTHENTICATION_FAILED As Integer = 530
Private FRemoteHost As String = "127.0.0.1"
Private FRemotePath As String = "."
Private FRemoteUser As String = "anonymous"
Private FRemotePassword As String = "anonymous@nowhere.com"
Private FRemotePort As Integer = 21
Private clientSocket As Socket = Nothing
Private response As String
Public Event OnAuthentication As AuthenticationEvent
Public Event OnConnectionEvent As ConnectionEvent
Public Event OnRawDataReceivedEvent As RawDataReceivedEvent
Public Event OnTcpEvent As TcpEvent
Public Sub New()
End Sub
Public Sub New(ByVal remoteHost As String, _
ByVal remotePath As String, _
ByVal remoteUser As String, ByVal remotePassword As String, _
ByVal remotePort As Integer)
FRemoteHost = remoteHost
FRemotePath = remotePath
FRemoteUser = remoteUser
FRemotePassword = remotePassword
FRemotePort = remotePort
End Sub
Public Sub Connect()
clientSocket = New Socket(AddressFamily.InterNetwork, _
SocketType.Stream, ProtocolType.Tcp)
Dim endpoint As IPEndPoint = _
New IPEndPoint(Dns.Resolve(FRemoteHost).AddressList(0) , _
FRemotePort)
Try
clientSocket.Connect(endpoint)
Catch ex As Exception
Throw New IOException("Connect failed", ex)
End Try
ReadResponse()
End Sub
Public Sub Disconnect()
If (clientSocket Is Nothing = False) Then
clientSocket.Disconnect(True)
RaiseEvent OnConnectionEvent(Me, _
New ConnectionEventArgs(False))
End If
End Sub
Private Sub ReadResponse()
Dim reply As String = ReadLine()
'Figure out the response and raise that event
BroadcastResponse(reply)
End Sub
Private Function ReadLine() As String
Return ReadLine(False)
End Function
Private Function ReadLine(ByVal clearResponse As Boolean) _
As String
Const EndLine As Char = "\n"
Const BUFFER_SIZE As Integer = 512
Dim data As String = ""
Dim buffer(BUFFER_SIZE) As Byte
Dim bytesRead As Integer = 0
If (clearResponse = True) Then response = String.Empty
While (True)
Array.Clear(buffer, 0, BUFFER_SIZE)
bytesRead = clientSocket.Receive(buffer, buffer.Length, 0)
data += ASCII.GetString(buffer, 0, bytesRead)
If (bytesRead < buffer.Length) Then Exit While
End While
Dim parts() As String = data.Split(EndLine)
If (parts.Length > 2) Then
response = parts(parts.Length - 2)
Else
response = parts(0)
End If
If (response.Substring(3, 1).Equals(" ") = False) Then
Return ReadLine(False)
End If
Return response
End Function
Private Sub BroadcastResponse(ByVal reply As String)
' Permit handling as raw data
RaiseEvent OnRawDataReceivedEvent(Me, _
New RawDataReceivedEventArgs(reply))
Dim code As Integer = Int32.Parse(reply.Substring(0, 3))
Dim data As String = reply.Substring(4)
' Permit special handling as code and data
RaiseEvent OnTcpEvent(Me, New TcpEventArgs(code, data))
' Specific handling based on code
Select Case code
Case SENDING_DATA_PORT_20
Case COMMAND_NOT_IMPLEMENTED
Case CONNECTED
RaiseEvent OnConnectionEvent(Me, _
New ConnectionEventArgs(True, code, data))
Case AUTHENTICATED
RaiseEvent OnAuthentication(Me, New _
AuthenticationEventArgs(True, code, data))
Case NEED_PASSWORD
Case AUTHENTICATION_FAILED
RaiseEvent OnAuthentication(Me, _
New AuthenticationEventArgs(False, code, data))
End Select
End Sub
Public Sub Login()
SendCommand("USER " + FRemoteUser)
SendCommand("PASS " + FRemotePassword)
End Sub
Public Sub Login(ByVal user As String, ByVal password As String)
FRemotePassword = password
FRemoteUser = user
Login()
End Sub
Private Sub SendCommand(ByVal command As String)
command += Environment.NewLine
Dim commandBytes() As Byte = ASCII.GetBytes(command)
clientSocket.Send(commandBytes, commandBytes.Length, 0)
ReadResponse()
End Sub
End Class
Public Class TcpEventArgs
Private FCode As Integer
Private FData As String
Public Sub New(ByVal code As Integer, ByVal data As String)
FCode = code
FData = data
End Sub
Public ReadOnly Property Code() As Integer
Get
Return FCode
End Get
End Property
Public ReadOnly Property Data() As String
Get
Return FData
End Get
End Property
End Class
Public Class ConnectionEventArgs
Inherits TcpEventArgs
Private FConnected As Boolean = False
Public Sub New(ByVal connected As Boolean)
MyBase.New(-1, "")
FConnected = connected
End Sub
Public Sub New(ByVal connected As Boolean, _
ByVal code As Integer, ByVal data As String)
MyBase.New(code, data)
FConnected = connected
End Sub
Public ReadOnly Property Connected() As Boolean
Get
Return FConnected
End Get
End Property
End Class
Public Class AuthenticationEventArgs
Inherits TcpEventArgs
Private FAuthenticated As Boolean = False
Public Sub New(ByVal authenticated As Boolean)
MyBase.New(-1, "")
FAuthenticated = authenticated
End Sub
Public Sub New(ByVal authenticated As Boolean, _
ByVal code As Integer, ByVal data As String)
MyBase.New(code, data)
FAuthenticated = authenticated
End Sub
Public ReadOnly Property Authenticated() As Boolean
Get
Return FAuthenticated
End Get
End Property
End Class
Public Class RawDataReceivedEventArgs
Inherits TcpEventArgs
Private FRawData As String
Public Sub New(ByVal rawData As String)
MyBase.New(-1, "")
FRawData = rawData
End Sub
Public Sub New(ByVal rawData As String, _
ByVal code As Integer, ByVal data As String)
MyBase.New(code, data)
FRawData = rawData
End Sub
Public ReadOnly Property RawData() As String
Get
Return FRawData
End Get
End Property
End Class
Public Delegate Sub AuthenticationEvent(ByVal sender As Object, _
ByVal e As AuthenticationEventArgs)
Public Delegate Sub ConnectionEvent(ByVal sender As Object, _
ByVal e As ConnectionEventArgs)
Public Delegate Sub RawDataReceivedEvent(ByVal sender As Object, _
ByVal e As RawDataReceivedEventArgs)
Public Delegate Sub TcpEvent(ByVal sender As Object, _
ByVal e As TcpEventArgs)
توجه کنید که delegate کلاس خاصی در دات نت است
و یک برنامه برای اینکه کار میکند یا نه
Imports Ftp
Module Module1
Sub Main()
Dim client As FtpClient = New FtpClient()
AddHandler client.OnConnectionEvent, _
AddressOf OnConnection
AddHandler client.onRawDataReceivedEvent, _
AddressOf OnRawDataReceived
AddHandler client.OnAuthentication, _
AddressOf OnAuthenticated
client.Connect()
client.Login()
Console.WriteLine("press enter to exit")
Console.ReadLine()
client.Disconnect()
End Sub
Public Sub OnConnection(ByVal sender As Object, _
ByVal e As ConnectionEventArgs)
Console.WriteLine("Connected: " & e.Connected.ToString)
End Sub
Public Sub OnRawDataReceived(ByVal sender As Object, _
ByVal e As RawDataReceivedEventArgs)
Console.WriteLine("Received: " & e.RawData)
End Sub
Public Sub OnAuthenticated(ByVal sender As Object, _
ByVal e As AuthenticationEventArgs)
Console.WriteLine("Logged in: " + e.Authenticated.ToString())
End Sub
End Module
به کلاس توجه کنید که ما از اول کلاس گذاشتیم
titbasoft
پنج شنبه 29 بهمن 1383, 18:26 عصر
مَ.............مَ مَ مَ ....................
:strange: :strange: :strange: :strange:
اینو جدی میگم. من خیلی آدم قدی هستم :mrgreen: و کم پیش میاد این حرف رو بزنم ولی خدائییییییش کم اوردم. :wink:
آقا شرمنده کردی :cry:
titbasoft
پنج شنبه 29 بهمن 1383, 18:52 عصر
امیدوارم بعد از اینکه چیزهایی رو که این پائین نوشتم میخونی صورتت این شکلی :mad: نشه!!! :wink:
من خیلی پر رو تر از این حرفهام.
حالا می خوام بدونم که
1) دستورات Ftp همون get و put و chdir و اینها است؟
2) اگر ما بخواهیم Binary بفرستیم یا بگیریم چی؟ چون شما در readResponse از readLine استفاده کردی که داره ascii می خونه!
3) حالا فرض که binary هم خوندیم از کجا بفهیم این response ما دیتاست یا message و اگه دیتا بود چطوری save اش کنیم
یه کار راحت تر هم میشه کرد . برای اینکه از شر یک کلاس ftp خلاص بشی یک reference رو اینترنت معرفی کن که یه چند وقتی برم دنبال نخود سیا (اگر موجود داری) چون توی msdn اصلا نتونستم پیدا کنم. :cry:
یا یک تکه کد لطف کن بنویس که میره توی فولدر www و یک فایل به نام test.dat رو download می کنه! :cry:
ehsan707
پنج شنبه 29 بهمن 1383, 23:01 عصر
یاد یه خاطره مزخرف افتادم
چند وقت قبل توی پارس دیتا یه مدتی مشغول یا بهتر بگم الاف بودم اونها یک برنامه میخواستند که با هات میل و پاپ3 کار کنه بیس برنامه asp.net بود و اولش ما بهشون گفتیم بابا جان این کاری که شما میخوایید بکنید کلاسهای از پیش تعیین شده داره . از همین کلاسها استفاده کنید . اونها گفتند نه ما شرکت خیلی معتبری هستیم و همه سورسها رو داریم شما اگه بتونی که فقط هدر میل رو بگیری کارت درسته ما هم همین کار رو کردیم . بعدش گفتند بادی هم بگیر ما هم گرفتیم بعدش گفتند فیل ضمیمه رو بگیر ما هم رفتیم سراغ فرمت mime خلاصه دهنمون سرویس شد 85 درصد کار که تموم شد گفتند نمیخواهیم گفتم به جهنم پول من رو بدبد گفتند کاری که نکردی پول هم ندادند معلوم نیست توی فکر برخی ها چی میگذره ؟ خدا همه امت اسلام رو شفا عنایت کنه بخصوص اونها که شرکتشون به قول مشتریهاشون ملکی ایرلاینه
به هر حال دوست عزیز شما گفتی که قبلا با کنترل وی بی این کار کردی پس نباید مشکلی داشته باشی
ولی اگه وقت کردم در مورد سوال شما هم تحقیق میکنم البته دوستان دیگه هم هستند میتونن کمکت کنند. فعلا یه کم صبر داشته باش ان الله مع الصابرین
(اگر کامند رو فرستادین و سابی برای فرستادن باینری ندارین احتیاط واجب این است که سابی هم برای آن بگذارید )
ehsan707 ره
ehsan707
پنج شنبه 29 بهمن 1383, 23:02 عصر
باز هم اگه سوالی داری بپرس عزیزم :)
ehsan707
پنج شنبه 29 بهمن 1383, 23:02 عصر
یاد یه خاطره مزخرف افتادم
چند وقت قبل توی پارس دیتا یه مدتی مشغول یا بهتر بگم الاف بودم اونها یک برنامه میخواستند که با هات میل و پاپ3 کار کنه بیس برنامه asp.net بود و اولش ما بهشون گفتیم بابا جان این کاری که شما میخوایید بکنید کلاسهای از پیش تعیین شده داره . از همین کلاسها استفاده کنید . اونها گفتند نه ما شرکت خیلی معتبری هستیم و همه سورسها رو داریم شما اگه بتونی که فقط هدر میل رو بگیری کارت درسته ما هم همین کار رو کردیم . بعدش گفتند بادی هم بگیر ما هم گرفتیم بعدش گفتند فیل ضمیمه رو بگیر ما هم رفتیم سراغ فرمت mime خلاصه دهنمون سرویس شد 85 درصد کار که تموم شد گفتند نمیخواهیم گفتم به جهنم پول من رو بدبد گفتند کاری که نکردی پول هم ندادند معلوم نیست توی فکر برخی ها چی میگذره ؟ خدا همه امت اسلام رو شفا عنایت کنه بخصوص اونها که شرکتشون به قول مشتریهاشون ملکی ایرلاینه
به هر حال دوست عزیز شما گفتی که قبلا با کنترل وی بی این کار کردی پس نباید مشکلی داشته باشی
ولی اگه وقت کردم در مورد سوال شما هم تحقیق میکنم البته دوستان دیگه هم هستند میتونن کمکت کنند. فعلا یه کم صبر داشته باش ان الله مع الصابرین
(اگر کامند رو فرستادین و سابی برای فرستادن باینری ندارین احتیاط واجب این است که سابی هم برای آن بگذارید )
ehsan707 ره
titbasoft
جمعه 30 بهمن 1383, 12:05 عصر
بسم رب با مرامان
اولا من نمی دونم چرا این پارس وب (دیتا) :mad: یه جوری به همه حال میده. فقط اینقدر بگم که ما هم باهاش درگیری داشتیم و داریم . بماند.... :wink:
به خدا من که از اول گفتم کارم راه افتاد با همون component ای که تو component spot بود که تقریبا همون چیزی بود که من می خواستم چون socket5 رو هم ساپورت میکرد و البته شدیدا طرفدار این جمله مایکروسافتی ها هستم که میگن
buy it don't build it
یواشکی میگم با اینکه نسبت به هیچ چیز تعصبی ندارم ولی یه جورایی مایکروسافتی حساب میشیم دیگه!! :oops:
ولی گفتم حالا که عنایت جناب احسان خان (دامت و افاضاته و برکاته) شامل حال این بنده گناهکار سراپا تقصیر شده بزار از محضر استاد خوشه چینی کنیم و لا غیر
و اما مسالةٌ : من کجا گفتم عجله دارم برادر . سر فرصت هر وقت وقت کردی یه چیزی هم برای خشنودی دل رهبر برای ما بنویس. :wink:
با تشکر از جناب حجة vb و کدنویسیون احسان (دامت برکاته) :D
titbasoft
سه شنبه 02 فروردین 1384, 20:51 عصر
اینم یه مقاله توپسسس :wink: :flower:
http://support.microsoft.com/default.aspx?scid=kb;en-us;832679
titbasoft
سه شنبه 02 فروردین 1384, 21:01 عصر
اینم command های ftp برید حالشو ببرید :wink: :موفق:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceftpsv/html/ceconsupportedftpcommands.asp
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.