On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 7007
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.19 17:01. Заголовок: Передача файла через инет подсистему


Есть у кого примерчик ?

PS
я про Socket(ы)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 15 [только новые]


moderator


Пост N: 1161
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 01.02.19 17:18. Заголовок: По какому протоколу,..


По какому протоколу, кто принимает?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7008
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.19 17:31. Заголовок: я имел в виду переда..


я имел в виду передачу по локальной сети , принимать будет приложение на Андроиде (ну или допустим приложение под Виндой)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 348
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 01.02.19 19:08. Заголовок: Dima пишет: Есть у ..


Dima пишет:

 цитата:
Есть у кого примерчик ?

PS
я про Socket(ы)



Не знаю поможет ли тебе :) в FWH есть с десяток примеров.
Приблизительно так -

function Client()

oSocket = TSocket():New( 2000 )

oSocket:bRead = { | oSocket | MsgInfo( oSocket:GetData() ) }

// Never use a MsgInfo() here because it hangs Windows!!!
oSocket:bConnect = { || oWnd:SetText( "Connected!" ) }

oSocket:bClose = { || MsgInfo( "Server has closed!" ) }

oSocket:Connect( "127.0.0.1" ) // use the server IP address here

return nil

function SendFile()

local cFileName := cGetFile( "*.*", "Select a file to send by Internet" )

if ! Empty( cFileName ) .and. File( cFileName )
oSocket:SendData( "SENDFILE " + cFileName( cFileName ) )
oSocket:SendFile( cFileName )
MsgInfo( "File sent" )
endif

return nil

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7009
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.19 22:08. Заголовок: ММК Пасиб :) ММК пи..


ММК
Пасиб :)
ММК пишет:

 цитата:
SendFile()


Это видимо что то типа hb_inetSendAll ...вероятно

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1497
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 02.02.19 10:02. Заголовок: Посмотри J:\Job&..


Посмотри harbour\src\rtl\hbsockhb.c

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1162
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 02.02.19 10:14. Заголовок: Примеров именно с hb..


Примеров именно с hb_inet у меня нет, я его не использовал, но сделано это должно быть примерно так:
на сервере - listen, accept, read, на клиенте - connect, write. Должен быть какой-то согласованный протокол, т.е., набор команд, которые посылает клиент и понимает сервер, ну типа той же SENDFILE из примера выше. Для синхронизации работы будет хорошо, если сервер будет посылать ответы на принятые команды.
В принципе, в letodb или в guiserver - та же логика, тот же набор базовых функций, только вместо hb_inet другая библиотека.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 349
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 02.02.19 11:40. Заголовок: Клиент - пример выше..


Клиент - пример выше
Вот пример с сервером -

#include "FiveWin.ch"

#define ST_COMMAND 1
#define ST_SENDFILE 2
#define FILE_BLOCK 8000

static oWnd, oSocket, oClient

//------------------------------------------------------------------------//

function Main()

local oBar

DEFINE WINDOW oWnd TITLE "Server socket"

DEFINE BUTTONBAR oBar OF oWnd _3D

DEFINE BUTTON OF oBar ACTION Server() TOOLTIP "Listen"

DEFINE BUTTON OF oBar ACTION oClient:SendData( "Hello from server!" ) TOOLTIP "Talk to client"

ACTIVATE WINDOW oWnd

return nil

//------------------------------------------------------------------------//

function Server()

oSocket = TSocket():New( 2000 )

oSocket:bAccept = { | oSocket | oClient := TSocket():Accept( oSocket:nSocket ),;
oClient:Cargo := ST_COMMAND,;
oClient:bRead := { | oSocket | OnRead( oSocket ) },;
oClient:bClose := { | oSocket | OnClose( oSocket ) } }

oSocket:Listen()

return nil

//------------------------------------------------------------------------//

function OnRead( oSocket )

local cData := oSocket:GetData()
local cToken

LogFile( "sockserv.txt", { Len( cData ), cData } )

do case
case oSocket:Cargo == ST_COMMAND
cToken = StrToken( cData, 1 )
do case
case cToken == "SENDFILE"
oSocket:Cargo = ST_SENDFILE
oSocket:hFile = fcreate( StrToken( cData, 2 ) )

case cToken == "MSG"
MsgInfo( SubStr( cData, 5 ) )
endcase

case oSocket:Cargo == ST_SENDFILE
fwrite( oSocket:hFile, cData, Len( cData ) )
LogFile( "sockserv.txt", { "writting..." } )

if Len( cData ) < FILE_BLOCK
// fclose( oSocket:hFile )
// MsgInfo( Len( cData ) )
// oSocket:Cargo = ST_COMMAND
endif
endcase

return nil

//------------------------------------------------------------------------//

function OnClose( oSocket )

MsgInfo( "Client has closed!" )

do case
case oSocket:Cargo == ST_SENDFILE
fclose( oSocket:hFile )
endcase

oSocket:End()

return nil

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7010
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.02.19 16:31. Заголовок: PSP пишет: Посмотри..


PSP пишет:

 цитата:
Посмотри harbour\src\rtl\hbsockhb.c


Шибко сложно и не понятно где почитать...
Клиента предварительно сделал , файлик передается (в виде строки разумеется) и кушается тестовым
сервером.
Обошелся только возможностями инет подсистемы что описаны в доке от Кресина.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1498
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.02.19 10:22. Заголовок: Dima пишет: Шибко с..


Dima пишет:

 цитата:
Шибко сложно и не понятно где почитать...



Там функции-обёртки. Они уже включены в harbour


 цитата:
/*
* hb_socketGetError() --> nSocketError
* hb_socketGetOSError() --> nOSError
* hb_socketErrorString( [ nSocketErrror = hb_socketGetError() ], [ hSocket ] ) --> cError
* hb_socketGetSockName( hSocket ) --> aAddr | NIL
* hb_socketGetPeerName( hSocket ) --> aAddr | NIL
* hb_socketOpen( [ nDomain = HB_SOCKET_AF_INET ], [ nType = HB_SOCKET_PT_STREAM ], [ nProtocol = 0 ] ) --> hSocket
* hb_socketClose( hSocket ) --> lSuccess
* hb_socketShutdown( hSocket, [ nMode = HB_SOCKET_SHUT_RDWR ] ) --> lSuccess
* hb_socketBind( hSocket, aAddr ) --> lSuccess
* hb_socketListen( hSocket, [ iQueueLen = 10 ] ) --> lSuccess
* hb_socketAccept( hSocket, [ @aAddr ], [ nTimeout = FOREVER ] ) --> hConnectionSocket
* hb_socketConnect( hSocket, aAddr, [ nTimeout = FOREVER ] ) --> lSuccess
* hb_socketSend( hSocket, cBuffer, [ nLen = Len( cBuffer ) ], [ nFlags = 0 ], [ nTimeout = FOREVER ] ) --> nBytesSent
* hb_socketSendTo( hSocket, cBuffer, [ nLen = Len( cBuffer ) ], [ nFlags = 0 ], aAddr, [ nTimeout = FOREVER ] ) --> nBytesSent
* hb_socketRecv( hSocket, @cBuffer, [ nLen = Len( cBuffer ) ], [ nFlags = 0 ], [ nTimeout = FOREVER ] ) --> nBytesRecv
* hb_socketRecvFrom( hSocket, @cBuffer, [ nLen = Len( cBuffer ) ], [ nFlags = 0 ], @aAddr, [ nTimeout = FOREVER ] ) --> nBytesRecv
* hb_socketSetBlockingIO( hSocket, lValue ) --> nSuccess
* hb_socketSetNoDelay( hSocket, lValue ) --> lSuccess
* hb_socketSetExclusiveAddr( hSocket, lValue ) --> lSuccess
* hb_socketSetReuseAddr( hSocket, lValue ) --> lSuccess
* hb_socketSetKeepAlive( hSocket, lValue ) --> lSuccess
* hb_socketSetBroadcast( hSocket, lValue ) --> lSuccess
* hb_socketSetSndBufSize( hSocket, nValue ) --> lSuccess
* hb_socketSetRcvBufSize( hSocket, nValue ) --> lSuccess
* hb_socketGetSndBufSize( hSocket, @nValue ) --> lSuccess
* hb_socketGetRcvBufSize( hSocket, @nValue ) --> lSuccess
* hb_socketSetMulticast( hSocket, [ nFamily = HB_SOCKET_AF_INET ], cAddr ) --> lSuccess
* hb_socketSelectRead( hSocket, [ nTimeout = FOREVER ] ) --> nRet
* hb_socketSelectWrite( hSocket, [ nTimeout = FOREVER ] ) --> nRet
* hb_socketSelectWriteEx( hSocket, [ nTimeout = FOREVER ] ) --> nRet
* hb_socketSelect( aRead, lSetRead, aWrite, lSetWrite, aExcep, lSetExcep, [ nTimeout = FOREVER ] ) --> nRet
* hb_socketResolveINetAddr( cAddr, nPort ) --> aAddr | NIL
* hb_socketResolveAddr( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> cResolved
* hb_socketGetHostName( aAddr ) --> cHostName
* hb_socketGetHosts( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> aHosts
* hb_socketGetIFaces( [ nFamily ], [ lNoAliases ] ) --> aIfaces
* hb_socketGetFD( hSocket ) --> nFD
* hb_socketSetFilter( hSocket, cFilterName, [ hSockParams ] ) --> hSocket
* hb_socketGetFilter( hSocket ) --> cFilterName
* hb_socketRead( hSocket, @cBuffer, [ nLen = Len( cBuffer ) ], [ nTimeout = FOREVER ] ) --> nBytesRead
* hb_socketWrite( hSocket, cBuffer, [ nLen = Len( cBuffer ) ], [ nTimeout = FOREVER ] ) --> nBytesWritten
* hb_socketFlush( hSocket, [ nTimeout = FOREVER ], [ lSync ] ) --> nBytesLeft
* hb_socketAutoFlush( hSocket, [ nNewSetting ] ) --> nPrevSetting
* hb_socketAutoShutdown( hSocket, [ lNewSetting ] ) --> lPrevSetting
*/



Может тоже пригодится.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7011
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.02.19 11:26. Заголовок: PSP пишет: Может то..


PSP пишет:

 цитата:
Может тоже пригодится.


Это понятно. Назначение функций мне не понятно , примеров нет , кроме того надо знать как работать
корректно с сокетами. Можно конечно методом тыка , но это будет долго и с не понятным результатом.
Не думаю что достаточно тех 3-х функций что ты выделил , хотелось бы корректно решить задачу а не
абы как
Спасибо за желание помочь !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1499
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.02.19 13:48. Заголовок: Не за что. Помощи ка..


Не за что. Помощи как таковой и не было))
А можешь показать, чем ты решил?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7012
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.02.19 14:20. Заголовок: PSP Примерно так ..


PSP
Примерно так
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7018
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.02.19 14:36. Заголовок: Заработала связь с а..


Заработала связь с андроид однако :)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1503
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.02.19 10:16. Заголовок: Поделишься?))..


Поделишься?))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7019
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.02.19 10:20. Заголовок: PSP пишет: Поделишь..


PSP пишет:

 цитата:
Поделишься?))


Чем ?
Пример "клиента" я выложил.
Задачу на Андроид писал не я.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 681
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет