PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как сделать программу для передачи данных


Как сделать программу для передачи данных

Сообщений 1 страница 20 из 20

1

Есть пример но там используется доступность сайта

Код:
InitNetwork() 
Connect = OpenNetworkConnection("127.0.0.1", 2000) ; Связь с google через 80 порт, посредство протокола TCP/IP 
If Connect 
  MessageRequester("", "Сервер доступен"+Chr(10)+"ID связи - "+Str(Connect)) 
  CloseNetworkConnection(Connect) 
Else 
  MessageRequester("", "Сервер не доступен") 
EndIf

а надо сделать или чтобы передавалось через это на другой компьютер или скачивалось с сайта

0

2

Разве в справке нет примеров?

Сервер.

Код:
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
        Case #PB_NetworkEvent_Connect
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case #PB_NetworkEvent_Data
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, *Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(*Buffer), 0)
  
        Case #PB_NetworkEvent_File
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case #PB_NetworkEvent_Disconnect
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connection...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End

Клиент.

Код:
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832

ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
If ConnectionID
  MessageRequester("PureBasic - Client", "Client connected to server...", 0)
  
  SendNetworkString(ConnectionID, "An hello from a client !!! :-)")
    
  MessageRequester("PureBasic - Client", "A string has been sent to the server, please check it before quit...", 0)
  
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
  
End

Скачивание с сайта.

Код:
  InitNetwork()

  Filename$ = SaveFileRequester("Where to save index.php3 ?", "", "", 0)

  If ReceiveHTTPFile("http://www.purebasic.com/index.php3", Filename$)
    Debug "Success"
  Else
    Debug "Failed"
  EndIf

0

3

а где там справка??

0

4

а вот допустим как сделать так чтобы с другого компа выводился рабочий стол на программу??

0

5

Влад написал(а):

а вот допустим как сделать так чтобы с другого компа выводился рабочий стол на программу??

Клиент делает скрины со своего экрана и отсылает их на сервер. сервер в свою очередь отсылает координаты мыши и её действия( клики, скроллинг и т.п.) , а клиент повторяет эти действия у себя на компе - так осуществляется удаленное управление.

0

6

Влад написал(а):

а где там справка??

Прикалываешся?
Запускаешь PureBasic и жмешь кнопку F1 на клавиатуре!

0

7

ВиниПур написал(а):

Клиент делает скрины со своего экрана и отсылает их на сервер. сервер в свою очередь отсылает координаты мыши и её действия( клики, скроллинг и т.п.) , а клиент повторяет эти действия у себя на компе - так осуществляется удаленное управление.

а какой код??

0

8

просто я почти этого языка не знаю

0

9

Влад написал(а):

а какой код??

Влад написал(а):

просто я почти этого языка не знаю

А смысл? Скачай готовую прогу для удаленного администрирования ( типа радмин) и будет тебе тоже самое.
А если хочешь учить язык - то учи, пиши сам код, что непонятно спрашивай. А писать код за тебя ни кто не будет.

0

10

Может чем-то поможет эта тема http://forum.boolean.name/showthread.php?t=14282

0

11

Пётр написал(а):

Может чем-то поможет эта тема http://forum.boolean.name/showthread.php?t=14282

да это я читал там нет кодов и как я всё должен делать

0

12

Влад написал(а):

там нет кодов

Всё что там описано, все коды есть, надо только минимум желания:

Скриншот

Запущенные процессы

Клиент-сервер код выше, если помучаешь поиск, то найдешь как отправлять данные и файлы.

0

13

ВиниПур написал(а):

Запущенные процессы

а что этот пример что делает не могу понять я думал думал и нечего не надумал!!

0

14

ВиниПур написал(а):

Клиент-сервер код выше, если помучаешь поиск, то найдешь как отправлять данные и файлы.

да это я знаю просто берешь написанный выше код сервер ставишь на другой компьютер а на свой клиент водишь ip компьютера и ву аля готово но вот в чём загвоздка я только так делать умею для сайтов вот код

Код:
Structure AnalystRequest
  *buffer
  SizeBuf.i
  ClientID.l
EndStructure

#ProgName="PureBasic_Web_Server"
Port=2000;80 ; На этом порту будет работать сервер
DirFiles.s="web_files\" ; Папка с веб файлами
ProgName.s=ProgramFilename()
ProgPath.s=GetPathPart(ProgName)
WebFiles_Path.s=ProgPath+DirFiles
DefaultWebFile.s="index.html"
Error_WebFile.s="404_Eror.html"
#CorrectGMT_Time= - 2 ; Корректировка системного времени к Гринвичу
#Overload = "Извините, сервер перегружен. Зайтите немного позже."
*Buffer = AllocateMemory(64002)

AnalystRequest.AnalystRequest

If InitNetwork() = 0
  End
EndIf

Procedure.s GenerateCurrentDate()
  Shared CorrectGMT_Time
  Protected Result.s="Date: "
  Date=Date()
  Date=AddDate(Date, #PB_Date_Hour, #CorrectGMT_Time)
  
  
  Select DayOfWeek(Date)
    Case 0 : Result+"Sun "
    Case 1 : Result+"Mon "
    Case 2 : Result+"Tue "
    Case 3 : Result+"Wed "
    Case 4 : Result+"Thu "
    Case 5 : Result+"Fri "
    Case 6 : Result+"Sat "
  EndSelect
  
  Result+Str(Day(Date))+" "
  
  Select Month(Date)
    Case 1  : Result+"Jan "
    Case 2  : Result+"Feb "
    Case 3  : Result+"Mar "
    Case 4  : Result+"Apr "
    Case 5  : Result+"May "
    Case 6  : Result+"Jun "
    Case 7  : Result+"Jul "
    Case 8  : Result+"Aug "
    Case 9  : Result+"Sep "
    Case 10 : Result+"Oct "
    Case 11 : Result+"Nov "
    Case 12 : Result+"Dec "
  EndSelect
  
  Result+FormatDate("%yyyy %hh:%ii:%ss ", Date)+"GMT"
  ProcedureReturn Result
EndProcedure

Procedure SendError(ClientID)
  SendNetworkString(ClientID, "HTTP/1.1 404 Not Found"+Chr($0D)+Chr($0A))
  SendNetworkString(ClientID, GenerateCurrentDate()+Chr($0D)+Chr($0A))
  SendNetworkString(ClientID, "Server: "+#ProgName+Chr($0D)+Chr($0A))
  SendNetworkString(ClientID, "Content-Length: 0"+Chr($0D)+Chr($0A))
  SendNetworkString(ClientID, "Content-Type: text/html"+Chr($0D)+Chr($0A))
  SendNetworkString(ClientID, Chr($0D)+Chr($0A))
EndProcedure

Procedure.s TypeFile(Ex.s)
  Protected Result.s
  Result="text/html"
  Ex=LCase(Ex)
  
  If Ex="ico" Or Ex="jpeg" Or Ex="jpg" Or Ex="png" Or Ex="bmp" Or Ex="gif" Or Ex="tiff" Or Ex="tga"
    Result="image/x-icon"
  ElseIf Ex="css"
    Result="text/css"
  EndIf
  
  ProcedureReturn Result
EndProcedure


Procedure Send_File(ClientID, File.s)
  Protected Result=0, FileID, HTML_Code.s="", *HTML_Code=0
    FileID=ReadFile(#PB_Any, File)
    If FileID
      HTML_Code.s=""
      SizeFile=Lof(FileID)
      If SizeFile>0
        *HTML_Code=AllocateMemory(SizeFile+2)
        ReadData(FileID, *HTML_Code, SizeFile)
      EndIf
      CloseFile(FileID)
      If *HTML_Code=0
        SendError(ClientID)
      Else
        SendNetworkString(ClientID, "HTTP/1.1 200 OK"+Chr($0D)+Chr($0A))
        SendNetworkString(ClientID, GenerateCurrentDate()+Chr($0D)+Chr($0A))
        SendNetworkString(ClientID, "Server: "+#ProgName+Chr($0D)+Chr($0A))
        SendNetworkString(ClientID, "Content-Length: "+Str(SizeFile)+Chr($0D)+Chr($0A))
        SendNetworkString(ClientID, "Content-Type: "+TypeFile(GetExtensionPart(File))+Chr($0D)+Chr($0A))
        SendNetworkString(ClientID, Chr($0D)+Chr($0A))
        SendNetworkData(ClientID, *HTML_Code, SizeFile)
        FreeMemory(*HTML_Code)
        Debug File
        Result=1
      EndIf
    Else
      SendError(ClientID)
    EndIf
  ProcedureReturn Result
EndProcedure

Procedure Analyst_request(*Struct) ; Анализатор запросов от браурера
  Shared ProgPath, Error_WebFile, DefaultWebFile, WebFiles_Path
  Protected Info.AnalystRequest, Result=0, Rrequest_FileName.s
  Protected Dim RrequestArray.s(100)
  If *Struct
    CopyMemory(*Struct, @Info, SizeOf(AnalystRequest) )
    
    Rrequest.s=PeekS(Info\buffer, Info\SizeBuf)
    ReplaceString(Rrequest,Chr(13),Chr(10),#PB_String_InPlace)
    Rrequest=ReplaceString(Rrequest,Chr(10)+Chr(10),Chr(10))
    
    CountString = CountString(Rrequest, Chr(10))
    If CountString>0
      If CountString>100 : CountString=100 : EndIf
      Rrequest+Chr(10)
      For i=1 To CountString
        RrequestArray(i) = StringField(Rrequest, i, Chr(10))
      Next i
      
      TypeRrequest.s=RrequestArray(1)
      Len=Len(TypeRrequest)
      
      Pos=FindString(LCase(TypeRrequest),"get",1)
      If Pos>0
        Pos1=FindString(TypeRrequest,"/",Pos)
        If Pos1>0
          Pos2=FindString(TypeRrequest," ",Pos1)
          If Pos2>0
            Rrequest_FileName.s=Mid(TypeRrequest, Pos1+1, Pos2-Pos1-1)
            Rrequest_FileName=Trim(Rrequest_FileName)
          EndIf
        EndIf
        
        If Rrequest_FileName=""
          Rrequest_FileName=DefaultWebFile
        EndIf
        
        Debug Rrequest_FileName
        Send_File(Info\ClientID, WebFiles_Path+Rrequest_FileName)
        Result=1
      Else 
        SendError(Info\ClientID)
      EndIf
    Else
      SendError(Info\ClientID)
    EndIf
  EndIf
  
  If Result=0
      Send_File(Info\ClientID, ProgPath+Error_WebFile)
  EndIf
EndProcedure

If CreateNetworkServer(2, Port , #PB_Network_TCP)
  ;CreateFile(0,ProgPath+"log.txt")
  Repeat
    SEvent = NetworkServerEvent()
    If SEvent
      ClientID = EventClient()
         Select SEvent
           Case #PB_NetworkEvent_Connect ; Новый клиент подключился к серверу
             
           Case #PB_NetworkEvent_Data    ; От клинета пришли данные
             CountBytes=ReceiveNetworkData(ClientID, *Buffer, 10000)
             
             If CountBytes>=0
               ;WriteData(0,*Buffer, CountBytes)
               ;FlushFileBuffers(0)
               AnalystRequest\buffer = *Buffer
               AnalystRequest\SizeBuf = CountBytes
               AnalystRequest\ClientID = ClientID
               ;Analyst_request(@AnalystRequest)
                If CreateThread(@Analyst_request(), @AnalystRequest) = 0 
                    SendNetworkString(ClientID, "HTTP/1.1 200 OK"+Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, GenerateCurrentDate()+Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, "Server: "+#ProgName+Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, "Content-Length: "+Str(Len(#Overload)+2)+Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, "Content-Type: text/html"+Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, Chr($0D)+Chr($0A))
                    SendNetworkString(ClientID, #Overload)
                    SendNetworkString(ClientID, Chr($0D)+Chr($0A))
                Else
                    Delay(2)
                EndIf
             EndIf
             
           Case #PB_NetworkEvent_File    ; От клиента пришел файл
             
           Case #PB_NetworkEvent_Disconnect  ; Клиент разорвал соединение с сервером
             
         EndSelect      
    Else
      Delay(20)
    EndIf
  ForEver
   
Else
EndIf
End

этот код я взял из статьи Петра!!
вот а тут надо вить через клиент а я не могу понять как!!

0

15

не обижаетесь на меня я только учусь!!

0

16

ВиниПур написал(а):

Запущенные процессы

это вить что та типа определения запустилась ли программа я так понимаю поправьте меня!

0

17

а ну вот порылся и нашел сейчас посмотрим

0

18

а как сделать такой сервер который будет открываться в окне и там будет написано кто подключается из кода который привел Петр в начале статьи

0

19

Начиная с версии 5.10 передача файлов по сети запрещена =(

- Removed: SendNetworkFile(), ReceiveNetworkFile(), #PB_NetworkEvent_File to avoid possible security hole

Делаю сейчас сервер для обновлений и SendNetworkFile() на нём подошла бы идеально. Есть какие-нть альтернативы или придётся передавать через SendNetworkData()?

0

20

Чем не подходит передача через SendNetworkData()?
Конечно нужно написать чуть больше кода, но зато больше контроля над процессом обмена.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как сделать программу для передачи данных