Seite 1 von 1

Ruckelndes Bild

Verfasst: 13.05.2006 21:06
von Joel
Hi,
Ich möchte mich mit dem Thema Network testen und habe ein Programm zum Daten versenden versucht zu programmieren.
Aber leider ist ein Fehler aufgetreten, wenn ich bei meinem programm auf Verbinden Drücke ruckelt dass Fenster.Woran liegt dass?

Code: Alles auswählen

#WindowWidth  = 217
#WindowHeight = 317

If InitNetwork() = 0
  MessageBox_(Win,"Netzwerk Umgebung kann nicht vorbreitet werden!"+Chr(13)+"Ist dein Computer Internet Tauglich?","Warnung",#MB_OK | #MB_ICONERROR)
  End
EndIf

Port = 6507
Buffer = AllocateMemory(1000000)

If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, #PB_Window_MinimizeGadget, "Intel Ip 1.0")

 If CreateGadgetList(WindowID())
    
    Top = 10
    GadgetHeight = 24

    
    Frame3DGadget(#PB_Any,10, 15,200,290,"Intel IP 1.0")
    ;Frame3DGadget(#PB_Any,10, 20,370,290,"",#PB_Frame3D_Single)

    StringGadget(0,  100, 40, 100, 20, "")
    StringGadget(75,  100, 67, 100, 20, "")
    TextGadget(0708, 35, 70,250,20,"Kennwort:")
    TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
    ButtonGadget(98, 70, 150, 100, 15, "Verbinden" )
    ;ButtonGadget(1, 223, Top,  72, GadgetHeight, "Play")
    ;ButtonGadget(2, 295, Top,  72, GadgetHeight, "Stop")  : Top+35
    ;DisableGadget(2,1)
    
    ;GadgetToolTip(1,"Play the current song")
    
    ;PanelGadget(3, 20, Top, #WindowWidth-50, #WindowHeight-Top-60)
     ; AddGadgetItem(3, 0, "MP3 PlayList")
      ;  ListViewGadget(4, 6, 10, 230, 148)

        ;For k=0 To 30
          ;AddGadgetItem(4, -1, "Music Song n° "+Str(k))
        ;Next

        ;ButtonGadget(5,  250, 10, 80, GadgetHeight, "Add")
        ;ButtonGadget(6,  250, 38, 80, GadgetHeight, "Remove")
        ;ButtonGadget(7,  250, 66, 80, GadgetHeight, "Select")
        ;GadgetToolTip(7, "Select the current song")
        
        ;TrackBarGadget(17, 10, 168, 310, 25, 0, 100)

      ;AddGadgetItem(3, 1, "Options")
        ;Top = 10
        ;CheckBoxGadget(10, 10, Top, 250, GadgetHeight, "Enable low-pass filter") : Top+30
        ;CheckBoxGadget(11, 10, Top, 250, GadgetHeight, "Enable visual plug-in")  : Top+30
        ;ComboBoxGadget(12, 10, Top, 250, 100) : Top+30
          ;AddGadgetItem(12, -1, "FireWorks")
          ;AddGadgetItem(12, -1, "OpenGL spectrum")
          ;AddGadgetItem(12, -1, "Bump bass")
       ; SetGadgetState(12,0)
        ;DisableGadget(12,1)
        
        ;OptionGadget(13, 10, Top, 80, GadgetHeight, "640*480") : Top+20
        ;OptionGadget(14, 10, Top, 80, GadgetHeight, "800*600") : Top+20
        ;OptionGadget(15, 10, Top, 80, GadgetHeight, "1024*768")
        ;SetGadgetState(13, 1)
        
        ;ButtonGadget(16, 150, Top, 80, GadgetHeight, "Info")
    ;CloseGadgetList()

    ;TextGadget  (9, 10, #WindowHeight-30, 250, 24, "PureBasic - Gadget demonstration")
    ;ButtonGadget(8, #WindowWidth-100, #WindowHeight-36, 80, 24, "Quit")

  EndIf
  
  ;SetGadgetState(3, 0)
  

  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Gadget

      Select EventGadgetID()
        
        Case 98
        Port = 6832
       Buffer = AllocateMemory(1000)

       If CreateNetworkServer(Port)
       Repeat
      
    SEvent = NetworkServerEvent()
  CloseWindow(0)
  If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0")
  TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
    If SEvent
    
      ClientID = NetworkClientID()
       CloseWindow(0)
       
      Select SEvent
      
        Case 1
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case 2
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(Buffer), 0)
  
        Case 3
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
    
      EndSelect
      EndIf 
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer()
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

     End    
        ;MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
        
         
      EndSelect

    EndIf

  Until EventID = #PB_Event_CloseWindow

EndIf

End 

Verfasst: 13.05.2006 21:47
von roherter
Ich denke mal das Problem liegt hier es wird immer wieder das fenster geöffnet und geschlossen,nächte mal bitte diePB Version mit angeben die du verwendest:

Code: Alles auswählen

  Repeat
              
              SEvent = NetworkServerEvent()
              CloseWindow(0)
              If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0")
                TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
                If SEvent
                  
                  ClientID = NetworkClientID()
                  CloseWindow(0)
                  
                  Select SEvent
                    
                    Case 1
                      MessageRequester("PureBasic - Server", "A new client has connected !", 0)
                      
                    Case 2
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
                      ReceiveNetworkData(ClientID, Buffer, 1000)
                      MessageRequester("Info", "String: "+PeekS(Buffer), 0)
                      
                    Case 3
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
                      
                    Case 4
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
                      Quit = 1
                      
                  EndSelect
                EndIf
              EndIf
              
            Until Quit = 1

Verfasst: 13.05.2006 21:53
von Joel
Dass ruckelt immer noch zwar nicht mehr so start aber immer noch.
Ich nutze PureBasic v3.94

Code: Alles auswählen

Repeat 
              
              SEvent = NetworkServerEvent() 
              CloseWindow(0) 
              If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0") 
                TextGadget(0709, 20, 44,250,20,"Name oder Nr.:") 
                If SEvent 
                  
                  ClientID = NetworkClientID() 
                  CloseWindow(0) 
                  
                  Select SEvent 
                    
                    Case 1 
                      MessageRequester("PureBasic - Server", "A new client has connected !", 0) 
                      
                    Case 2 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0) 
                      ReceiveNetworkData(ClientID, Buffer, 1000) 
                      MessageRequester("Info", "String: "+PeekS(Buffer), 0) 
                      
                    Case 3 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0) 
                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3") 
                      
                    Case 4 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0) 
                      Quit = 1 
                      
                  EndSelect 
                EndIf 
              EndIf 
              
            Until Quit = 1 


Verfasst: 14.05.2006 11:16
von Jilocasin
Ich hab noch ein Tipp für dich. Vielleicht isses ja ganz interessant:

Anstatt von MemoryBuffern würde ich Variablen nehmen.

So z.B:

Code: Alles auswählen

Select SEvent
  Case 1
  ...
  Case 2
  ...
  string.s = Space(1000)
  ReceiveNetworkData(ClientID, @string, 1000)
  MessageRequester("Info", "String: "+string, 0)
  Case 3
  ...
  Case 4
  ...
EndSelect

Verfasst: 14.05.2006 11:51
von walker
Hi,

... der Fehler liegt darin, das du a) 2 Repeat-Schleifen ineinander verschachtelt hast UND b) in der 2. das Window(0) schliesst und gleichzeitig wieder öffnest... wozu? um den Text zu ändern? (siehe SetGadgetText() in der PB-Hilfe)

Versuche mal, nur eine Repeat/Until Schleife zu verwenden (das ist hier ohne weiteres möglich)

Und noch ein Tip: allociere nur soviel Speicher, wie Du wirklich brauchst... (1000000 sind einfach zu viel; aber ich denke, das ist nur ein tippfehler, da Du ansonsten mit 1000 arbeitest)
Du erfährst über den Rückgabewert von ReceiveNetworkData() ob noch Daten vorhanden sind oder nicht (siehe PB-Hilfe dazu). Den solltest Du immer abfragen! (sonst gehen ggf. Daten verloren....)

cu

Verfasst: 14.05.2006 14:40
von mk-soft
ich würde alles was mit Network zu tun hat in einen Thread packen. Dann bleibt der Datenstrom auch erhalten wenn man das Fenster bewegt oder ein Menu betätigt.

FF :wink:

Verfasst: 14.05.2006 17:44
von Joel
Aha, ok ich probiers gerade mal aus. Ich habe auch schon vermutet dass dass was mit der Schleife ztun hat.