Дело в том, что у меня есть программа, которой пользуются два человека, но в разных городах. Один создает базу данных, а другой ей только пользуется. Раньше они пересылали данные по Skype, но в идеале хотелось бы через сервер. Вариант сервер-клиент отпадает, так как ни у кого нет постоянного IP-адреса, да и машины включаются не всегда одновременно.
Перебрал кучу разных вариантов, пока не остановился на API (уже и не помню, где нашел, копировал с разных мест, потом смотрел). Это смешно, но остальные получаются гораздо сложнее, хоть на VB6 или на VB.NET (VS2003). Программка весит всего 7KB и работает! Можно оформить ее в виде DLL и подключать.
- Код: Выделить всё
Module Mod_API
'
' Наверное самая короткая программа для копирования файлов на хост.
'
' Вызываем программу с параметром:
' Имя хоста|Логин|Пароль|Полное имя файла(fa)|Имя файла на сервере(sfa)
'
' Не знаю как на других хостах, а у меня корневая папка "htdocs", не хотел в параметрах повторять одно и тоже.
' Имя файла на сервере содержит и папку: например DOCUMENT/doc1.doc
' Если хост не пропускает некоторые расширения, то измените EXE на TMP и т.д.
' а при обратном копировании наоборот
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal ProxyName As String, ByVal ProxyBypass As String, ByVal Flags As Integer) As Integer
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hOpen As Integer, ByVal ServerName As String, ByVal ServerPort As Short, ByVal UserName As String, ByVal Password As String, ByVal Service As Integer, ByVal Flags As Integer, ByVal Context As Integer) As Integer
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect As Integer, ByVal LocalFile As String, ByVal ServerFile As String, ByVal Flags As Integer, ByVal Context As Integer) As Boolean
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Integer) As Short
Sub Main()
Dim hOpen, hConnect, kf As Integer, m_ser, m_log, m_pas, fa, sfa As String : kf = &H8000000
Dim tt() As String = Microsoft.VisualBasic.Command.Split("|")
hOpen = InternetOpen("API-Guide sample program", 0, Nothing, Nothing, 0)
m_ser = tt(0) : m_log = tt(1) : m_pas = tt(2) : fa = tt(3) : sfa = tt(4)
hConnect = InternetConnect(hOpen, m_ser, 21, m_log, m_pas, 1, kf, 0)
FtpPutFile(hConnect, fa, "/htdocs/" & sfa, 0, 0)
InternetCloseHandle(hConnect)
InternetCloseHandle(hOpen)
End Sub
End Module